java中的继承关系

ndmtzwdx / 2024-09-25 / 原文

继承是指我有多个类,而且这些类都有相同的属性和方法的时候就可以使用继承关系
java提供了一个关键字用来表示继承关系:extends
写法:class B extends A{} 表示B类继承自A类
这里的B称之为:子类,派生类
这里的A称之为:父类,基类或者超类
子类只能继承父类的成员变量和成员方法,并且不是私有的,如下

class Animal{
    String name;
    int age;

    public void eat(){
        System.out.println("吃饭");
    }

    public void sleep(){
        System.out.println("睡觉");
    }
}

class Dog extends Animal {
    //子类相当于这里有一份父类中的非私有成员

    public void lookDoor(){
        System.out.println("看家");
    }
}

class Cat extends Animal{

}

public class ExtendsDemo1{
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.eat();
        dog.sleep();
        System.out.println(dog.name);
        System.out.println(dog.age);
    }
}

类与类之间继承只能有一个直接父类,但是可以进行多重继承,形成继承体系

class Mother{

}

class GrandFather{

}

class Father extends GrandFather{

}

class Son extends Father{

}

//这样是不行的
//class Son extends Mother,Father{
//
//}

public class ExtendsDemo2 {
    public static void main(String[] args) {

    }
}

子类方法查找变量的规则符合就近原则:
1.会先在自己的方法中进行查找,如果找到就直接使用
2.如果自己的方法中找不到,就去当前类的成员变量中找
3.如果当前的成员变量也没有,就去父类中的成员变量中去找

class Fu2{
    int a = 10;
}

class Son2 extends Fu2{
    int a = 20;

    public void fun1(){
        int a = 30;
        System.out.println(a); // 30
        System.out.println(this.a); // 20
//        Fu2 fu2 = new Fu2();
//        System.out.println(fu2.a);
        System.out.println(super.a); // 10


    }
}

public class ExtendsDemo4 {
    public static void main(String[] args) {
        Son2 son2 = new Son2();
        son2.fun1();
    }
}