Java基础篇之继承与方法重写
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Java基础篇之继承与⽅法重写
1.继承的解释:Java语⾔中继承体现的是⼀种“is a”的关系,Java仅⽀持单继承,但可以多层继承,即⼦类继承⽗类,⽗类继承祖⽗类
2.继承的注意事项:
1.⼦类只能继承⽗类中⾮私有的成员变量和成员⽅法
2.⼦类不能继承⽗类的构造⽅法,但可以通过super关键字去访问⽗类的构造⽅法
注意:super的⽤法和this很像,this代表本类对象的引⽤,super代表⽗类存储空间的标识,可以理解为⽗类引⽤,可以操作⽗类的成员
⼦类中所有的构造⽅法默认都会先访问⽗类中⽆参的构造⽅法,这是因为⼦类继承⾃⽗类,所以要先初始化⽗类,这样⼦类才能⽤⽗类中的成员变量,综上,⼦类的每⼀个构造⽅法 第⼀句肯定是super();调⽤⽗类的⽆参构造⽅法。
如果⽗类没有⽆参的构造⽅法,那么⼦类的构造⽅法就会报错,解决办法:
1.加⼊⼀个⽗类的⽆参构造⽅法
2.通过使⽤super关键字去显⽰的调⽤⽗类的带参构造⽅法,例如⽗类中没有⽆参构造⽅法,但有⼀个带String name的构造⽅法:public Person(String name){},此时⼦类的构造⽅法第⼀⾏可以调⽤这个⽗类带参的构造⽅法:super("张三")。
this(...)和super(...)必须在第⼀⾏,避免多次初始化⽗类。
3.⽅法重写:⼦类中出现了和⽗类中⼀模⼀样的⽅法,包括⽅法名,参数,返回值类型等都⼀模⼀样,
如果⼦类中的⽅法和⽗类中的⽅法⼀模⼀样,就近原则会先使⽤⼦类的⽅法。
4.⽅法重写的注意事项:⽗类中的私有⽅法不能被重写,因为⼦类⽆法继承⽗类的私有⽅法
⼦类重写⽗类中的⽅法时,访问权限不能更低,,即⼦类⽅法的访问修饰符权限必须要⼤于等于⽗类的访问修饰符,所以如果⽗类中的该⽅法被public修饰,那么⼦类重写该⽅法,访问修饰符也必须是public
⽗类静态⽅法,⼦类也必须通过静态⽅法重写,这与多态相关
5.代码展⽰:
class Person2{
private int age=10;
String name="张三";
int score=90;
public Person2(){
System.out.println("这是Person2的⽆参构造⽅法");
}
public void eat(){
System.out.println("⼈都要吃饭");
}
public void show(){
System.out.println("⼈都会思考");
}
static{
System.out.println("静态代码块");
}
private void method(){
System.out.println(age);
System.out.println(name);
}
public void method2(){
System.out.println(age);
System.out.println(name);
}
public void play(){
System.out.println("我是⼈,我可以玩");
}
private void example(){
System.out.println("我是⼀个样例");
}
}
class Student extends Person2 {
int score=80;
{
System.out.println("构造代码块");
}
static{
System.out.println("student的静态代码块");
}
public Student(){
System.out.println("我是Student的构造⽅法");
}
public void method3(){
int score=70;
System.out.println(score);
System.out.println(this.score);
System.out.println(super.score);
}
public void play(){
super.play();
System.out.println("我同时也是⼀名学⽣,还需要学习");
}
}
public class ExtendsDemo {
public static void main(String[] args) {
Student s=new Student();//静态代码块 student的静态代码块这是Person2的⽆参构造⽅法构造代码块我是Student的构造⽅法 s.eat();//⼈都要吃饭
s.show();//⼈都会思考
//s.method(); ⽆法访问⽗类私有的成员⽅法
//int a=s.age;⽆法访问⽗类私有的成员变量
s.method2();//通过⽗类中的成员⽅法访问私有成员变量 10 张三
s.method3();//70 80 90
s.play();//我是⼈,我可以玩我同时也是⼀名学⽣,还需要学习
}
}。