1、基本实例
class FatherClass{
public void eat(){
System.out.println("这是父类中的吃饭方法!");
}
public void sleep(){
System.out.println("这是父类中的睡觉方法");
}
}
class ChildClass extends FatherClass{ //子类继承父类
public void play(){
System.out.println("这是子类中的玩方法");
}
public void eat(){//在子类中构成了方法的重载
System.out.println("这是子类中的吃饭方法");
}
}
public class Test{
public static void main(String[] args){
ChildClass t1 = new ChildClass();//子类的初始化
t1.sleep();//输出:这是父类中的睡觉方法
}
}
- 多个类存在相同的属性和方法时,可以将这些属性和方法单独放到一个类中
- 使用 extends 关键字
- 提高了代码的复用性和维护性
2、特点
-
Java只支持单继承,不支持多继承(也就是一个子类只能有一个父类)
class child extends father{} //对
class child extends father1,father2{} //错 -
Java支持多层继承
class A{}
class B extends A{}
class C extends B{}
3、注意事项
- 子类只能继承父类的非私有方法和成员变量
- 子类不能继承父类的构造方法,可以通过 super 关键字去访问父类的构造方法
- 不要为了部分功能而继承
4、super 关键字
- super 关键字和 this 关键字的区别
this :代表本类对应的引用
super:代表父类引用
this.成员变量:调用本类的成员变量
super.成员变量:调用父类的成员变量
this.成员方法:调用本类的成员方法
super.成员方法:调用父类的成员方法
this(…):调用本类的构造方法
super(…):调用父类的构造方法
例如:
class FatherClass{//父类
public int num = 10;//父类变量
}
class ChildClass extends FatherClass{//子类继承父类
public int num = 20;//子类变量
public void show(){//子类方法
int num = 30;//局部变量
System.out.println(num);//输出30
System.out.println(this.num);//调用本类中的成员变量,输出20
System.out.println(super.num);//调用父类中的成员变量,输出10
}
}
public class Test{
public static void main(String[] args){
ChildClass t = new ChildClass();//实例化子类
t.show();//调用子类中的show方法
}
}
5、子类中所有的构造方法默认访问父类中空参数的构造方法,子类初始化之前一定会完成父类的初始化。
例:
class Fu{
public Fu(){
System.out.println("父类中的无参构造方法");
}
public Fu(String name){
System.out.println("父类中的有参构造方法,参数:"+name);
}
}
class Zi extends Fu{
public Zi(){
//super();//系统默认自带super关键字
System.out.println("子类中的无参构造方法");
}
public Zi(int age){
//super();//系统默认自带super关键字
System.out.println("子类中的有参构造方法,参数:"+age);
}
}
public class Test{
public static void main(String[] args){
Zi t1 = new Zi();//系统默认先访问父类的无参构造函数,然后访问子类的无参构造函数
System.out.println("-------------------------");
Zi t2 = new Zi(18);//系统默认先访问父类的无参构造函数,然后访问子类的有参构造函数
}
}
运行结果:
6、父类没有无参构造方法时
- 在父类加一个无参构造方法
- 通过 super 关键字调用父类有参构造方法
- 子类通过 this 去调用本类中的其他构造方法
7、方法的重载与方法的重写
- 方法的重载:本类中出现方法名相同,参数列表不同的方法,与返回值无关
- 方法的重写:子类中出现和父类中方法声明一模一样的方法
8、方法重写的注意事项:
- 父类中私有方法不能被重写。(因为私有方法不能被继承)
- 子类重写父类方法时,访问权限不能更低
- 父类静态方法,子类也必须通过静态方法进行重写