Java的面向对象
06-继承
2021-07-01 484 2
简介 继承的初步理解
1. 继承 inheritance
面向对象的特征之:继承性 why?
一、继承性的好处:
① 减少了代码的冗余,提高了代码的复用性 (提高可维护性)
② 便于功能的扩展(提高可扩展性)
③ 为之后多态性的使用,提供了前提
二、继承性的格式:
class ClassAaa extends ClassBbb{}
ClassAaa:子类、派生类、subclass
ClassBbb:父类、超类、基类、superclass
2.1体现:一旦子类A继承父类B以后,子类A中就获取了父类B中声明的所有的属性和方法(包含父类中私有的属性和方法)。
特别的,父类中声明为private的属性或方法,子类继承父类以后,仍然认为获取了父类中私有的结构。
只有因为 封装性(解决可见性的问题) 的影响,使得子类不能直接调用父类的结构。
2.2 子类继承父类以后,子类还可以声明自己特有的属性或方法:实现功能的拓展,子类功能更为强大
子类和父类的关系,不同于子集和集合的关系。
extends:延展、扩展
三、Java中关于继承性的规定:
1.一个类可以被多个子类继承。
2.Java中类的单继承性:一个类只能有一个父类(不能有多个父类)
3.子父类是相对的概念。
4.子类直接继承的父类,称为:直接父类。间接继承的父类称为:间接父类
5.子类继承父类以后,就获取了直接父类以及所有间接父类中声明的所有的属性和方法
四、 1. 如果我们没有显式的声明一个类的父类的话,则此类继承于java.lang.Object类
2. 所有的java类(除java.lang.Object类之外)都直接或间接的继承于java.lang.Object类
3. 意味着,所有的java类具有java.lang.Object类声明的功能
以下代码的继承树
//Creature.java package com.ylaihui.oop2; public class Creature { public void breath(){ System.out.println("breath..."); } }
//Personp.java package com.ylaihui.oop2; public class Personp extends Creature { String name; private int age; Personp(){} public void setName(String name){ this.name = name; } public void setAge(int age){ this.age = age; } public String getName(){ return this.name; } public int getAge(){ return this.age; } public void eat(){ System.out.println("person eat..."); } }
//Teacher.java package com.ylaihui.oop2; public class Teacher extends Personp { String major; Teacher(){} public void show(){ System.out.println(major); } }
//PersonpTest.java package com.ylaihui.oop2; public class PersonpTest { public static void main(String[] args) { Teacher t = new Teacher(); //t.age = 40; // private age : The field Personp.age is not visible t.setAge(40); System.out.println(t.getAge()); t.eat(); t.name = "John"; System.out.println(t.getName()); t.show(); // 继承间接父类的方法 t.breath(); } }