继承是面向对象三大特征之一,封装居首位,封装以后造成了独立体,独立体 A和独立体B 之间可能存在继承关系。其实程序中的继承灵感来自于现实生活,在现实生活中继承到处可见,例如,儿子继承了父亲的财产,儿子不须要努力就颇有钱。java
生活中的继承:框架
继承时子类继承父类的特征和行为,使得子类对象(实例)具备父类的属性,或子类从父类继承方法,使得子类具备与父类相同的行为。兔子和羊属于食草动物类,狮子和豹属于食肉动物类。食草动物和食肉动物又是属于动物类。因此继承须要符合的关系是:is-a(Bird is-aAnimal),父类更通用,子类更具体。虽然食草动物和食肉动物都是属于动物,可是二者的属性和行为上有差异,因此子类会具备父类的通常特性也会具备自身的特性。测试
定义this
经过 extends 关键字,能够声明一个子类继承另一个父类,定义格式以下:spa
代码示例:code
package com.wrg; // 定义员工类Employee,作为父类
class Employee { // 定义name属性
String name; // 定义员工的工做方法blog
public void work() { System.out.println("全力以赴地工做"); }
} /** * 定义讲师类Teacher 继承 员工类Employee */
class Teacher extends Employee { // 定义一个打印name的方法继承
public void printName() { System.out.println("name=" + name); }
} //定义测试类内存
public class ExtendsTest { public static void main(String[] args) { // 建立一个子类对象
Teacher t = new Teacher(); // 为该员工类的name属性进行赋值 t.name = "小明"; // 调用该员工的 // printName()方法 t.printName(); // name = 小明 // 调用Teacher类继承来的work()方法 t.work(); // 全力以赴地工做
}
}
好处
注意:不要仅为了获取其余类中某个功能而去继承
子类的特色
B类继承 A类,则称 A类为超类(superclass)、父类、基类,B类则称为子类(subclass)、派生类、扩展类。
子类不能直接访问父类中私有的(private)的成员变量和方法。
Java只支持单继承和多层继承,不容许多重继承
class SubDemo extends Demo{ } //ok
class SubDemo extends Demo1,Demo2...//error
java 中规定,子类继承父类,除构造方法不能继承以外,剩下均可以继承。可是私有的属性没法在子类中直接访问。(父类中private修饰的不能在子类中直接访问。能够经过间接的手段来访问。)
java 中的类没有显示的继承任何类,则默认继承 Object类,Object类是 java 语言提供的根类(老祖宗类),也就是说,一个对象与生俱来就有 Object类型中全部的特征。
继承的弊端
继承的应用场景
本质上,子类继承父类以后,是将父类继承过来的方法归为本身全部。实际上调用的也不是父类的方法,是他子类本身的方法(由于已经继承过来了就属于本身的)。
经过子类对象访问一个方法
在子类方法中访问一个变量,采用的是就近原则。
问题:若是父类中没有无参构造方法,只有带参构造方法,该怎么办呢?
三种用法
this和super的区别