就近原则:谁离我近我就访问谁,先在局部位置找,找不到然后在到本类成员位置到,如果本类成员位置找不到就到父类成员位置找,逐级往上找。
package oop.Extends.a03oopextendsdemo03;
public class Test {
public static void main(String[] args) {
Zi z = new Zi();
z.show();
}
}
class Fu{
String name="fu";
}
class Zi extends Fu{
String name="zi";
public void show(){
String name="zishow";
System.out.println(name);//zishow
System.out.println(this.name);//zi
System.out.println(super.name);//fu
}
}
练习:
package oop.Extends.a04oopextendsdemo04;
public class Test4 {
public static void main(String[] args) {
Zi z=new Zi();
z.show();
}
}
class Fu{
String name="Fu";
String hobby="喝茶";
}
class Zi extends Fu{
String name="zi";
String game="吃鸡";
public void show(){
//如何打印zi
System.out.println(name);//从局部位置开始往上找
//如何打印Fu
System.out.println(super.name);//从本类成员位置开始往上找
//如何打印喝茶
System.out.println(super.hobby);//从父类成员位置开始往上找
//如何打印吃鸡
System.out.println(game);
}
}
直接调用满足就近原则:谁离我近,我就调用谁
super调用,直接访问父类
当父类的方法不能满足子类现在的需求时,需要进行方法重写。
书写格式:
在继承体系中,子类出现了和父类中一模一样的方法声明,我们就称子类的这个方法是方法重写。
@Override重写注解:
是放在重写后的方法上的,校验子类重写时语法是否正确。
package oop.Extends.a05oopextendsdemo05;
public class Test5 {
public static void main(String[] args) {
OverseasStudent s=new OverseasStudent();
s.lunch();
}
}
class Person{
public void eat(){
System.out.println("吃米饭,吃菜");
}
public void drink(){
System.out.println("喝开水");
}
}
class OverseasStudent extends Person{
@Override
public void eat(){
System.out.println("吃意大利面");
}
@Override
public void drink(){
System.out.println("喝凉水");
}
public void lunch(){
eat();
drink();
super.eat();
super.drink();
}
}
方法重写的注意事项和要求
1.重写方法的名称、形参列表必须与父类中的一致.
2.子类重写父类方法时,访问权限子类必须大于等于父类.
3.子类重写父类方法时,返回值类型必须小于等于父类.
4.建议:重写的方法尽量和父类保持一致.
5.只有被添加到虚方法表中的方法才能被重写.
package oop.Extends.a06oopextendsdemo06;
public class Dog {
public void eat(){
System.out.println("狗在吃狗粮");
}
public void drink(){
System.out.println("狗在喝水");
}
public void lookHome(){
System.out.println("狗在看家");
}
}
package oop.Extends.a06oopextendsdemo06;
public class Husky extends Dog{
public void breakHome(){
System.out.println("哈士奇又在拆家了");
}
}
package oop.Extends.a06oopextendsdemo06;
public class SharPei extends Dog{
@Override
public void eat(){
super.eat();//吃狗粮
System.out.println("沙皮狗在吃骨头");
}
}
package oop.Extends.a06oopextendsdemo06;
public class ChineseDog extends Dog{
@Override
public void eat(){
System.out.println("吃剩饭");
}
}
package oop.Extends.a06oopextendsdemo06;
public class Test {
public static void main(String[] args) {
Husky h=new Husky();
h.eat();
h.drink();
h.breakHome();
h.lookHome();
ChineseDog cd=new ChineseDog();
cd.eat();
cd.drink();
cd.lookHome();
}
}