标签:fan 注解 支持 参数 http 无法 rap 类继承 必须
多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那一个类即可。其中,多个类可以称为子类,单独那一个类称为父类、超类或者基类。
继承:就是子类继承父类的属性和行为,使得子类对象具有与父类相同的属性、相同的行为。子类可以直接访问父类中的非私有的属性和行为。继承描述的是事物之间的所属关系,这种关系是: is-a 的关系。继承的关系中,“子类就是一个父类”,也就是说子类可以被当做父类看待。例如,兔子属于食草动物,食草动物属于动物。可见,父类更通用,子类更具体。我们通过继承,可以使多种事物之间形成一种关系体系。继承主要解决的问题是共性抽取。
好处
继承关系当中的特点
通过 extends 关键字,可以声明一个子类继承另外一个父类,定义格式如下:
注意:父类只是一个普通的类
定义父类
package MyCode.demo01; // 定义一个父类 public class MyFather { //父类中的成员变量 public int age = 18; //父类中的成员方法 public void method() { System.out.println("我是父类中的方法"); } }
定义子类
package MyCode.demo01; // 定义子类MySon继承MyFather public class MySon extends MyFather { }
定义测试类
package MyCode.demo01; public class MyTest { public static void main(String[] args) { //创建子类对象 MySon son = new MySon(); //子类里面什么代码都没有,但是继承了父类中非私有的方法和属性 son.method(); System.out.println(son.age); } }
代码执行后的结果
创建父类对象
创建子类对象
访问方式1:直接通过子类对象访问成员变量:等号左边是谁,就优先用谁,没有则向上(父类)找。
访问方式2:间接通过成员方法访问成员变量:该方法属于谁,就优先用谁,没有则向上(父类)找
创建父类对象
创建子类对象
如果子类父类中出现重名的成员方法,这时的访问是一种特殊情况,叫做方法重写 (Override)。
方法重写的注意事项:
1. 必须保证父子类之间方法的名称相同,参数列表也相同。
2. 子类方法的返回值必须【小于等于】父类方法的返回值范围。
3. 子类方法的访问权限必须【大于等于】父类方法的权限修饰符。
子类可以根据需要,定义特定于自己的行为。既沿袭了父类的功能名称,又根据子类的需要重新实现父类方法,从 而进行扩展增强。设计原则:对于已经投入使用的类,尽量不要修改,推荐一个新的类,来重复利用其中共性内容,添加新的内容。
代码举例
定义老款手机
package MyCode.demo02; // 本来的老款手机 public class Phone { public void call() { System.out.println("打电话"); } public void send() { System.out.println("发短信"); } public void show() { System.out.println("显示号码"); } }
定义新款手机类,方法覆盖重写应用。
package MyCode.demo02; // 定义一个新手机,使用老手机作为父类 public class NewPhone extends Phone { //重写父类的来电显示号码功能,并增加自己的显示姓名和图片功能 @Override public void show() { //调用父类已经存在的功能使用super super.show(); //增加自己特有显示姓名和图片功System.out.println("显示来电姓名"); System.out.println("显示头像"); } }
定义测试类
package MyCode.demo02; public class Demo01Phone { public static void main(String[] args) { // 创建子类对象 NewPhone np = new NewPhone(); //调用继承下来的方法 np.call(); np.send(); // 调用子类重写的方法 np.show(); } }
代码执行后的结果
super关键字用来访问父类内容,用法有三种:
this关键字用来访问本类内容,用法也有三种:
第三种用法当中要注意:
代码举例
package MyCode.demo03; class Animal { public void eat() { System.out.println("animal : eat"); } }
创建子类Cat
package MyCode.demo03; class Cat extends Animal { public void eat() { System.out.println("cat : eat"); } public void eatTest() { // this 调用本类的方法 this.eat(); // super 调用父类的方法 } super.eat(); } }
创建测试类
package MyCode.demo03; public class Test { public static void main(String[] args) { //创建父类对象Animal Animal a = new Animal(); a.eat(); //创建子类对象 Cat c = new Cat(); c.eatTest(); } }
代码执行后的结果
在每次创建子类对象时,先初始化父类空间,再创建其子类对象本身。目的在于子类对象中包含了其对应的父类空间,便可以包含其父类的成员,如果父类成员非private修饰,则子类可以随意使用父类成员。代码体现在子类的构造方法调用时,一定先调用父类的构造方法。
Java只支持单继承,不支持多继承。
Java支持多层继承(继承体系)。
子类和父类是一种相对的概念。tips:顶层父类是Object类。所有的类默认继承Object,作为父类。
标签:fan 注解 支持 参数 http 无法 rap 类继承 必须
原文地址:https://www.cnblogs.com/wurengen/p/11963444.html