什么是继承extends?:
继承是一种机制,通过继承机制,子类可以使用父类中属性和方法
父类----子类 一般 —特殊
父类:子类的共性抽象出来
子类继承父类,表明子类是一种特殊的父类,并且具有父类所不具有的一些属性或方法。
如果子类能够访问父类的d属性和方法,即是子类从父类中继承的属性和方法
(哪些属性和方法能被继承取决于子类能否突破父类的边界)
继承的特点:
1、继承只支持单继承,不能多继承
public class A extends B,C {} -> 这是错误的
2、继承支持多级继承
public class A extend B {}
public class B extend C {}
3、一个父类可以有多个子类
public class A extend C {}
public class B extend C {}
4、构造方法不能继承,也不能重写
私有方法可以继承,但不能被重写
静态方法可以继承,但不能被重写
构造方法不可被继承
原因:i.构造方法名必须和类名保持一致
ii. 子类中的内容要比父类中要多,构造过程相对父类较复杂,
需要子类有自己的构造方法
属性和方法能否被继承,取决于访问修饰符
本类 同包子类 非同包子类 其他
private(私有的) √ × × ×
default(默认的) √ √ × ×
protected(受保护的) √ √ √ ×
public(公开的) √ √ √ √
从严到宽
i.所有的访问修饰符都可以修饰方法、构造方法、属性
只有 default、public 能够修饰类
ii.继承性:
- Private 私有的,本类内部 子类不能继承
- Default 本类内部+同包 可以访问 同包子类可以继承
- Protected 受保护的 本类内部+同包+不同包子类 子类可以继承
- Public 公开的 不受边界约束 子类可以继承
继承关系下的对象创建过程:
①在继承关系下,去构建子类对象,会先去构建父类对象
②i.分配空间(父类+子类)
ii.构建父类对象(初始化父类属性+调用父类构造方法)
iii.初始化子类属性
iv.调用子类构造方法
下面用一个程序来详细解释一下继承的使用:
class TestExtend{
public static void main(String[] args) {
Dog dog = new Dog();
//dog类里面并没有eat()和sleep()方法,所以dog对象调用的是父类的吃和睡觉方法;
dog.eat();
dog.sleep();
}
}
class Animal{
public void eat(){
System.out.println("吃吃吃");
}
public void sleep(){
System.out.println("睡觉,睡10个小时");
}
}
class Dog extends Animal{
//这里不定义任何方法,
}
Java中 的单继承:
java中是单继承
但是是多级继承,属性和方法可以进行逐级叠加
一个类最多只能有一个直接父类;extends 只能放一个类的类名;
体现了java的简单性: 即类之间会行成简单的树状结构