1.什么是继承
1.父类怎么形成的:不想在每个类中都重复写一写代码,我们就定义
一个父类,将这些类重复的代码抽取到父类中,其他的类想使用父类
中抽取的成员,直接继承即可
2.格式:
子类 extends 父类
3.注意:
a.子类可以继承父类中私有和非私有成员
但是不能使用父类私有成员
b.构造方法不能被继承
c.静态方法能继承但是不能被重写
2.继承如何使用
格式:
子类 extends 父类
通过extends关键字在子类中声名其父类
3.继承中,成员变量和成员方法的访问特点
子类和父类中的成员变量不重名:
子类和父类中的成员变量重名:
看等号左边是谁,先调用谁中的成员变量,子类没有,找父类
public class Fu {
int numFu = 100;
int num = 10000;
}
public class Zi extends Fu{
int numZi = 10;
int num = 1000;
}
public class Test01 {
public static void main(String[] args) {
Fu fu = new Fu();
System.out.println(fu.numFu);//100
System.out.println(fu.num);//父类中的num
Zi zi = new Zi();
System.out.println(zi.numZi);//10
System.out.println(zi.numFu);//100
System.out.println(zi.num);//子类中的num
System.out.println("====================");
//多态 父类引用指向子类对象
Fu fu1 = new Zi();
System.out.println(fu1.num);//父类中的num
}
}
子类和父类中的成员方法不重名:
子类和父类中的成员方法重名
public class Fu {
public void methodFu(){
System.out.println("父类中的methodFu方法");
}
public void method(){
System.out.println("我是父类中的method方法");
}
}
public class Zi extends Fu {
public void methodZi() {
System.out.println("methodZi方法");
}
public void method(){
System.out.println("我是子类中的method方法");
}
}
public class Test01 {
public static void main(String[] args) {
Fu fu = new Fu();
fu.methodFu();
fu.method();//父类的method
System.out.println("==============");
Zi zi = new Zi();
zi.methodZi();
zi.methodFu();
zi.method();//子类的method
System.out.println("==============");
//多态
Fu fu1 = new Zi();
fu1.method();//子类的
}
}
4.方法的重写
1.概述:子类中有一个和父类从方法名上以及参数列表上一样的方法
2.前提:必须有子父类继承关系
3.检测是否是重写方法:在方法上加一个注解
@Override
4.1.注意事项
1. 子类方法重写父类方法,必须要保证权限大于等于父类权限。(权限指的是权限修饰符)
public -> protected -> 默认 -> private
2. 子类方法重写父类方法,方法名和参数列表都要一模一样。
3. 私有方法不能被重写,构造方法不能被重写,静态方法也不能重写
4. 子类重写父类方法之后,返回值类型应该是父类方法返回值类型的子类类型
一般情况下,子类重写父类方法之后,都一样
5.私有方法,静态方法可以继承但是不能被重写,构造方法不能被继承,也不能被重写
继承只支持单继承,不能多继承
public class A extends B,C{} //错误
public class A extends B{}//正确
继承支持多层继承
public class A extends B{}
public class B extends C{}
一个父类可以都多个子类
public class A extends C{}
public class B extends C{}