继承和抽象类
1.面向对象的三大特征:封装性,继承性,多态性。继承是多态的前提,如果没有继承,就没有多态。
2继承解决的问题是共性抽取。在继承关系中,“子类就是一个父类”,也就是说子类可以看成父类
定义父类的格式(一个普通的类)
public class 父类的名称{
}
定义子类的格式
public class 子类名称 extends 父类名称{
}
(1)在父子类的继承关系中,如果成员变量重名,则创建子类对象时,访问有两种方法。直接通过子类对像访问成员变量: 等号左边是谁,就优先用谁,没有则向上找 。左边看创建的对象。间接通过成员方法访问成员变量:该方法属于谁,就优先用谁,没有则向上找。
(2)局部变量直接用, 本类的成员变量 this.num 父类的成员变量 super.num
(3) 在父子类的继承关系中:创建子类对象,访问同名成员方法的规则: 创建的对象时谁,就优先用谁,如果没有就向上找。Zi z = new Zi(); zi.method
(3) 重写(override)覆盖 覆写概念:在继承关系中,方法的名称一样,参数列表也一样。重写(override);方法的名称一样,参数列表也一样。 重载(overload):方法名称一样,参数列表不一样。覆盖的特点:创建的是子类对象,则优先用子类方法@override : 写在方法前面,用来检测是不是有效的正确覆盖重写。
(4)子类方法的返回值必须小于等于父类方法的返回值范围。子类方法的权限必须大于等于父类方法的权限修饰。
(5)public > protected > (default) > private 备注: default不是关键字,而是什么都不写,留空。
(6)设计原则:对于已经投入使用的类,尽量不要进行修改,推荐定义一个新的类,来重复利用其中共性内容,并添加改新内容。
(7)在继承关系中:字符类构造方法的访问 特点: 1 字类构造方法当中有一个默认隐含的"super()"调用,所以一定先调用的父类构造,后执行的子类构造。 2.子类构造可以通过super关键字来调用父类重载构造。3 super的父类构造调用,必须是子类构造方法的第一个语句。不能一个子类构造调用多次super构造。
(8)在7中。super有三种用法 。 this也有三种用法。在本类中的成员方法中,访问本类的另一个成员方法。this.method();
在本类的构造方法中,访问本类的另一个构造方法。 this.Zi(23432);调用有参的构造。 注意:A:this(…)调用也必须是构造方法的第一个语句,唯一一个。B super 和 this 两种构造不能同时使用。
二: 抽象的方法 :如果父类当中的方法不确定如何进行{}方法体实现,那么这就应该是一个抽象方法。 图形要计算面计。(抽象没有说计算什么的面计)具体是抽象的反义词
(1)抽象方法:就是加上abstract关键字,然后去掉大括号,直接分号结尾。抽象类:抽象方法所在的类,必须是抽象类才行。在class之前写上abstract即可。
(2) 如何使用抽象类和抽象方法; 1. 不能直接创建new抽象类对象。2 必须用一个子类来继承抽象的父类。3. 子类必须覆盖重写抽象类父类当中所有的抽象方法。覆盖重写(实现):子类去掉抽象方法的abstract关键字,然后补上方法体大括号。 4. 创建子类对象进行使用。