继承
物以类聚,世间万物皆对象,对象也可以分成若干类别。
• 类别内的对象属性和方法都具有一定的共同点。
子类和父类
Man extends Human 表示Man继承于Human
Human是父类,Man是子类
子类继承父类所有的属性和方法(但不能直接访问private成员)
• 根据信息隐藏原则:子类会继承父类所有的方法。可以直接
使用。
构造器
每个Java类都必须有构造函数。
如果没有显式定义构造函数,Java编译器自动为该
类产生一个空的无形参构造函数。
每个子类的构造函数的第一句话,都默认调用父类的无参数构造函数super(),除非子类的构造函数第一句话是super,而且super语句必须放在第一条,不会出现连续两条super语句。
父类Item的构造器
public Item(String title, int playingtime, boolean gotIt,String comment) {//Item的构造器,初始化成员变量;
super();
this.title = title;
this.gotIt=gotIt;
this.playingtime = playingtime;
this.comment = comment;
}
子类CD的构造器
public CD(String title, String artist, int playingtime, String comment,int numOftrack) {//CD的构造器
super(title, playingtime,false, comment);//传给父类Item去初始化
this.numOftrack=numOftrack;
this.artist=artist;
}
如果子类第一句话没有super,
子类构造函数默认第一句话都会去调用父类的构造函数
抽象类
如果一个类暂时有方法未实现,需要被定义为抽象类
抽象类关键字abstract声明
• 抽象类的组成
–(optional)成员变量,个数不限
–(optional)具体方法,方法有实现,个数不限
–(optional)抽象方法,加abstract关键字,个数不限
public abstract class Shape {
public abstract void draw(Graphics g);
}
子类可以继承于抽象类,但是一定要实现父类们所有abstract的方法。如果不能完全实现,那么子类也必须被定义为抽象类。
接口
如果类的所有方法都没有实现,那么这个类就算是接口
interface。
类只可以继承(extends)一个类,但是可以实现(implements)多
个接口,继承和实现可以同时。
类实现接口,就必须实现所有未实现的方法。如果没有全
部实现,那么只能成为一个抽象类。
抽象类和接口相同点:两者都不能被实例化,不能new操作
public interface climbTree{
public void climb();
}
public class cat implements climbTree{
}
造型
子类可以转换成父类,而父类不可以转为子类。
子类继承父类所有的财产,子类可以变成父类(从大变小,即向
上造型)
子类继承父类的所有方法,但子类可以重新定义一个名字、参数和父类一样的方法,这种行为就是重写(覆写,覆盖,override, not overload(重载))。
子类的方法的优先级高于父类的,比如Man是父类,Human是子类,则可以
Man a=new Human();
而此时就是想上造型,当对象a想调用函数时,必须只能调用父类与子类共有的,比如Man有个print函数,Human也重写了print函数,但是Human还有一个write函数,此时a.write();是错误的,而
a.print();调用的是Human的print()函数
多态
多态:子类转型为父类后,调用普通方法,依旧是子类的
方法。
多态的作用
–以统一的接口来操纵某一类中不同的对象的动态行为
–对象之间的解耦
接口与抽象类不同点
–抽象类abstract, 接口interface
–抽象类可以有部分方法实现,接口所有方法不能有实现
–一个类只能继承(extends)一个(抽象)类,实现(implements)多个接口
–接口可以继承(extends)多个接口
–抽象类有构造函数,接口没有构造函数
–抽象类可以有main,也能运行,接口没有main函数
–抽象类方法可以有private/protected, 接口方法都是public
转载:https://blog.csdn.net/weixin_43372187/article/details/105509287