继承:
1. Java中类的继承特点:
1)Java只支持单继承,不支持多继承。(一个儿子只能有一个爹)
2)Java支持多层继承。
3)子类只能继承父类所有非私有的成员变量和成员方法。
4)子类不能继承父类的构造方法,但是可以通过super关键字去访问父类构造方法。
2. 继承的优点与缺点:
优点
a:提高了代码的复用性
b:提高了代码的维护性。(比如动物都有腿,只需要在父类中增加即可。)
c:让类与类之间产生了关系,是多态的前提
缺点:
类的耦合性增强了。
3. super
1) 调用成员变量
子类和父类出现同名变量, 依据就近原则,子类有就用自己的。
如果子类想访问父类的同名变量,怎么办?
使用super关键字访问父类的成员变量和成员方法。
注意:
子父类出现同名的变量只是在讲课中举例子有,在开发中是不会出现这种情况的
子类继承父类就是为了使用父类的成员,那么如果定义了同名的成员变量没有意义了
this和super的区别:
this:代表当前对象的引用,谁来调用我,我就代表谁。
super:代表当前对象父类的引用。
如何使用:
1. 调用成员变量
this.成员变量 调用本类的成员变量,也可以调用父类的成员变量
super.成员变量 调用父类的成员变量
2. 调用构造方法 【稍后再讲】
this(...) 调用本类的构造方法
super(...) 调用父类的构造方法
3. 调用成员方法 【稍后再讲】
this.成员方法 调用本类的成员方法,也可以调用父类的方法
super.成员方法 调用父类的成员方法
简单点说,如果子类有,this代表的就是子类的,如果子类没有,this还可以代表父类的。super只能代表父类的。
2) 构造方法:
如果没有特殊需求,尽量在类中定义一个无参的构造方法,避免被继承的时候出现错误。
4. 重写
overload 和 override的区别?
方法重载(overload):本类中方法的名称相同,参数列表不同。
方法重写(override): 子父类中的方法的名称相同,参数列表相同。
方法重载(overload):与返回值类型无关。
方法重写(override): 与返回值类型有关。返回值类型是一致的。
final关键字:
1. 概念: final是最终的意思,不能改变。
2. final修饰特点
修饰类,类不能被继承
修饰方法,方法不能被重写
修饰变量(成员变量和局部变量),变量就变成了常量,只能被赋值一次。
1) final修饰变量叫做常量,一般会与public static共用. public static final double PI = 3.14;
2)final修饰成员变量初始化:在定义的时候或者构造方法中进行初始化。
3)被final修饰的变量成了常量,只能被赋值一次。
final修饰局部变量:
1.变量为基本数据类型,是值不能被改变。
2.变量为引用数据类型,是地址值不能被改变,但是对象中的属性可以改变。
多态:
1. 多态(polymorphic),事物存在的多种形态。
2. 多态的前提:
1)要有继承关系
2)要有方法重写。
3)要有父类引用指向子类对象。
3. 多态访问:
1) 多态中访问成员变量: 编译看左边(父类),运行看左边(父类)
2) 多态中访问成员方法: 编译看左边(父类),运行看右边(子类)
3) 多态中访问静态方法: 编译看左边(父类),运行看左边(父类)。
4. 多态中向上转型和向下转型
向上转型:Animal a = new Cat();
向下转型:Cat c = (Cat) a;
注意:一定是先有向上转型才有向下转型。
5. 多态的好处
1)提高了代码的维护性(由继承保证)
2)提高了代码的扩展性(由多态保证)
注意:在开发的时候很少用Animal a = new Cat();的这种形式,而是当做参数的时候用多态,因为扩展性强。
6. 多态的弊端:不能使用子类特有的属性和行为
多态的使用:在开发中使用多态一般都是子类的实参传递给父类的形参,从而去调用子类的重写方法。