继承、抽象
一.继承
1.继承解决的问题:共性抽取
子类中有共性的内容(成员变量、成员方法)抽取到父类中,子类可以直接使用父类非私有的成员。
2.继承的格式
public cLass 父类{
//成员变量、构造方法、成员方法
}
public class 子类 extends 父类{
//成员变量、构造方法、成员方法
}
3.继承的特点
(1)Java只支持单一继承:一个类只能有一个父类。
(2)java可以多层继承:父类也可以有自己的父类,且子类可以继承父类的父类
注:任何一个类都直接或者间接的继承Object类。
4.继承的好处弊端:
好处:提高了代码的复用性、可维护性。
弊端:增强了代码的耦合性(类与类之间的关系更加密切)
5.继承中的访问特点
(1)成员变量的访问
遵循就近原则:先到子类中找,子类没有就去父类中找【如果想单独用子类或者父类的变量,则用this和super区分调用】
(2)成员方法的访问
遵循就近原则,补充:如果本类调用自己的方法,则this可以省略
(3)构造方法的访问
a.子类中所有的构造方法,都会默认去调用父类的空参数构造方法
原因:子类的构造方法的第一行有一个super(),它用于父类的成员初始化。
b.如果不想去访问父类的空参构造方法,可以手动使用super(参数)去访问有参构造方法
注意:this();和super();都只能在构造方法的第一行,所以他们不能共存。
6.方法重写
(1)概念:在子父类关系中,子类和父类有一模一样的方法,这种现象叫方法重写。
【意义:子类复写父类方法,既能保证父类方法的不变,子类也能有自己的方法实现】
(2)注意事项:
a.私有方法不能重写
b.静态、final修饰方法不能复写
c.子类复写父类方法,权限必须大于或等于父类
【public > protected > 默认 > private】
(3)与方法重载的区分
方法重载:同一个类中,方法名相同,参数列表不同(参数类型不同、参数个数不同、参数顺序不同,方法修饰权限可不同)
二.抽象
1.概念
抽象是继承的一个延伸,在父类中有些方法不知道怎么写,可以不写,这就是抽象方法。
2.抽象的使用格式:
//抽象一定是修饰父类
public abstract class 父类{
public abstract void 抽象方法();
public void 普通方法(){}
}
//子类继承抽象类,必须重写父类的抽象方法
public class 子类 extends 父类{
//重写抽象方法
@Override//注解,可用于判断重写方法是否写错
public void 抽象方法(){ 方法体; }
}
3.抽象的注意事项:
(1)抽象类不能创建对象
(2)具体的子类继承抽象类,必须重写抽象方法,如果是抽象类继承,可以不用复写方法(它的存在意义可以补充父类的抽象方法)
(3)抽象方法必须在抽象类中,但是抽象类中不一定要有抽象方法
(4)抽象方法没有方法主体
public class Test1 {
public static void main(String[] args) {
Zi z = new Zi();
z.show();
}
}
abstract class Fu{
public void show (){
System.out.println("FU你好,世界");
}
}
class Zi extends Fu{
public void show (){
super.show();
System.out.println("ZI你好,世界");
}
}
4.抽象的意义
限制子类的行为(方法),通过父类的抽象方法进行定义。