第四章:面向对象(继承和多态)

本文详细介绍了Java中的高级面向对象概念,包括继承、多态、抽象类与接口的区别及应用,以及如何通过这些特性增强代码的灵活性和可扩展性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 继承: 两个类之间存在"is-a"关系,就可以用继承来表示。
   使用关键字extends来指定。
   子类继承父类时,子类自动拥有父类的所有属性和方法(不包括构造器)。
   父类中私有的成员,子类继承了,但没有访问权限。
   只支持单根继承。
   创建子类对象时,首先需要调用父类的构造器对父类中定义的属性进行初始化,然后才会调用自己的构造器对自己特定的属性进行初始化。
  
2. super关键字:
    1)用来在子类中显示访问父类的成员(实例属性,实例方法)
       super.属性名; super.方法名(实参列表);
       子类和父类存在同名方法,在子类中要显示调用父类的同名方法时,一定要用super来调用。
    2) 用在子类构造器中第一条语句,用来显示调用父类中的构造器。

3. 访问控制符:四种访问权限,三种访问控制符
   公有的: public         一切皆可见
   受保护的:protected     本类,本包,子类可见
   默认的:无访问控制符    本类,本包(不建议使用)可见
   私有的:private         本类可见
   常用方式:属性私有,公开方法
  
4. 方法的重写(方法覆盖Override)
   1)在子父类之间有两个方法的方法名,参数列表相同。返回值类型匹配,访问权限没有缩小时,这两个方法就构成了覆盖。
   2)当父类的某个方法的功能不满足子类的需求时,就需要进行方法覆盖
   3)方法的覆盖是为了多态。也就是为了提高代码的可扩展性。
  
5. java.lang.Object类:是Java中所有类的根类。它提供的方法在任何一个类中都可以使用。
   1) public String toString(): 返回对象的字符串表示
   2) boolean equals(Object obj): 比较两个变量所引用的对象是否相等。默认是比较两变量是否引用自同一个对象。
   3) int hashCode():返回该对象的哈希码值。(一般都是对象内存地址传值)
   在自定义的类中,经常会重写这三个方法。
  
6. final修饰符
  1) final修饰变量,最终变量。只能赋值一次,必须在构造方法调用完毕之前。之后就不能再更改了。
  最常用做法:public static final组合修饰变量-->常量。
  2) final修饰方法,最终方法。不能被子类重写。
  3) final修饰类,最终类。不能被继承。
  4) final修饰参数,最终参数。
 
7. 多态
  1) 向上转型:把子类对象的引用直接赋值给父类变量。父类变量指向子类对象。只能访问父类中定义的属性和方法。不能访问子类中特有的成员。
  2) 向下转型:父类对象的引用不能直接赋值给子类变量。需要强制类型转换。为了防止出现ClassCastException,在强制类型转换之前,用instancenof进行类型判断。
  3) instanceof的语法:boolean flag = 对象变量名 instanceof 类型名;
  4) 方法的多态:在运行期间,判断变量所引用的对象的实际类型,根据其实际类型调用其相应的方法。动态绑定,延迟绑定。
  5)多态发生的条件
    a) 继承
    b) 方法的重写
    c) 向上转型
    d) 父类变量调用被子类重写的方法
   
8. 为了提供程序的可扩展性,应该尽量使用多态。一种方式就面向父类编程。声明属性的类型时尽量用父类类型。方法的参数类型也尽量用父类类型。

9. abstract关键字
  1)修饰方法,抽象方法,没有方法体。
  2)一个类有一个抽象方法时,必须定义成抽象类。(抽象类可以没有一个抽象方法)。抽象类中可以构造方法。
  3)一个类继承抽象类,要么实现抽象类中所有的抽象方法,要么定义成抽象类。
  4)抽象类可以声明变量,但不能实例化。
  5) 抽象类变量可以指向具体子类的对象。

10. 接口是一套规范,功能的声明。用interface来定义。
  1) 接口中的所有方法都是public abstract的。
     接口中的所有属性都是public static final的。
  2) 接口中不能有构造方法,不能实例化。
  3) 一个类实现某一接口,要么实现接口中的所有方法,要么定义成抽象类。
  4) 接口可以声明变量,接口变量可以指向实现本接口的具体子类的对象
  5) 一个类可以实现多个接口,接口间用逗号分隔。
  6) 接口和接口之间可以多重继承。
  
 11. 在编程过程中,尽量面向接口编程。属性的类型尽量定义成接口类型。方法的参数尽量定义成接口类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值