继承

1、Java中的关键字extends标识正在构造的新类派生于一个已经存在的类,已经存在的类称为超类、基类、或者父类;新派生的类称为子类、派生类,或者孩子类。

2、设计类的时候,应该将通用的方法放在父类中,将具有特殊用途的方法放在子类中,子类会自动拥有父类的域和方法,但是子类可以对从父类继承过来的方法进行覆盖(override),或者称为重写。

3、方法的重写有几个重要的注意项:
方法名相同,参数类型相同
子类返回类型小于等于父类方法返回类型,
子类抛出异常小于等于父类方法抛出异常,
子类访问权限大于等于父类方法访问权限。

4、子类绝对不能删除继承的任何方法或者域。

5、在子类构造器中,可以使用super关键字实现对父类构造器的调用,但必须注意该调用语句必须是子类构造器的第一行。如果子类构造器没有显式地调用父类的构造器,编译器会自动调用超类默认的构造器。

6、关键字super:super可以用于调用父类的方法;super可以用于调用父类的构造器。

7、多态:一个对象变量可以指示多种实际类型的现象被称为(polymorphism),多态仅存在于继承关系中,Java程序在运行时能自动地选择调用哪个方法的现象称为动态绑定(dynamic binding)。Java中的一个父类变量既可以引用一个父类对象,也可以引用任何一个其子类的对象。
当使用多态调用成员变量时,编译看左边,运行看左边(父类),例父类类型 变量名 = new 子类类型();
当使用多态调用成员方法时,编译看左边,运行看右边(子类)。
多态的弊端:只能借用多态调用父类和子类公用的方法。
多态的好处:可以提高程序的灵活性

8、Java中,不能将一个超类的引用赋给子类变量,但是在Java中,子类数组的引用可以转换为超类数组的引用,而不需要采用强制转换。

9、动态绑定:指的是对象方法在执行时,虚拟机会调用与实际调用对象所引用对象最合适的那个类的方法。具体对象方法调用步骤如下:
编译器查看对象的声明类型和方法名,此时编译器会根据这个方法签名一一列举所有该对象对应的类中的和其父类中可被访问的对应方法
编译器查看调用方法时提供的参数类型,如果在第一步中的所有方法列表中存在完全签名匹配的方法,则调用该方法,这个过程被称为重载解析(overloading resolution)
如果方法具有特定的权限修饰符如public、static、final,而非public,那么编译器将准确地知道应该调用哪个方法,这种调用方式称为静态绑定(static binding)
当程序运行且采用动态绑定调用方法时,虚拟机一定调用与调用对象所引用对象最合适的那个类的方法

10、由于每次调用类的方法均要进行方法的搜索,所以虚拟机会预先为每一个类创建一个方法表(method table),实际调用时搜索该表即可。

11、final关键字
被final关键字修饰的类不允许被继承
被final关键字修饰的成员变量,必须在创建对象之间进行初始化,且只能赋值一次。
被final关键字修饰的局部变量:
基本类型:该变量只可以被赋值一次
引用类型:该引用类型指向的地址不会改变,但该地址所对应的内存可以改变(即值可以被改变)
被final关键字修饰的方法不允许被重写

12、向上转型与向下转型与instanceof运算符
向上转型即将子类对象的引用指向父类变量,即 父类 父类变量 = new 子类();
向下转型即将父类对象的引用指向子类变量,即 子类 子类变量 = (子类)new 父类();,当向下转型时,如果两个类之间的确为继承关系,这么做没有问题,但是对于对象的强制转化存在风险,被强制转换的类名可以是任何一个可以被访问的类名,且编译器不会检查,故在进行向下转型时,必须使用instanceof运算符进行检查,例:类A为父类,类B和类C为其两个子类,当书写这条语句C c = ©new A();时,就需要提前使用(A instance of C)进行检查,这样的话,即使存在C c = ©new B();这样的语句,程序也不会出现异常。
但是尽量避免进行类型转换和使用instanceof运算符。

13、抽象类
在继承体系中,越往上,父类的相关方法和域就需要更为通用,此时可以使用抽象类,抽象类不需要考虑方法的实现,仅仅需要生命方法和域。
包含一个或多个抽象方法的类必须被声明为抽象类,抽象类中除了抽象方法外,还可以包含具体的数据和具体的方法。
抽象类的子类可以定义该抽象类的部分抽象方法或者补定义抽象方法,此时该子类也将成为抽象类。也可以实现父类中所有的抽象方法,此时该子类将不再是抽象的。
类即使不含有抽象方法,也可以将类声明为抽象类
抽象类不能被实例化,也就是说对于抽象类,不能创建抽象类的对象

14、权限修饰符:
private:仅对本类可见
public:对所有类可见
protected:对本包的所有类和其所有子类可见
默认:对本包可见

15、继承中方法的调用:对于父类和子类中同名的域或者方法,当使用子类对象进行调用时,优先调用子类的域或方法。

16、继承的特点:
Java支持单继承
Java支持多层继承
子类会自动拥有父类可继承的域和方法

17、继承的设计技巧:

将公共的域和操作放在超类中
不要使用受保护的域
使用继承实现“is-a”关系
除非所有的继承方法都有意义,否则不要使用继承
在覆盖方法时,不要改变预期的行为
使用多态,而非类型信息
不要过多的适用反射

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值