继承和多态, 接口和抽象类

1. 子类会继承父类的私有成员变量吗?  

子类会继承父类的所有成员变量,但是,不可以直接访问,因为 被 private 修饰的 只能在本类 访问,所以可以通过 父类提供的 例如: getter/setter  方法访问;

package test;

class Fu{
    private String name="huahua";
    int age=9;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}
class Zi extends Fu{

}

public class Test {
    public static void main(String[] args) {
            Zi z =new Zi();
        System.out.println(z.age);
      //      z.name;  //编译报错,因为name 在父类中是私有的
        System.out.println(z.getName());

    }

}

子类的实例化过程:

1. 进入子类构造函数;

2. super();看父类是如何对自己初始化的;

3. 显示初始化;

4;构造代码块初始化;

5、初始化完毕;

接口中,java8 加入了默认方法,静态方法;java9 中加入了 私有方法,私有静态方法;

抽象方法:(通过实现类的对象调用)

1.实现该接口的实现类必须重写该接口的所有抽象方法;

2.当该类实现了多个接口,有多个抽象方法,该类必须重写所有抽象方法,若有重名,只需重写一次;

3.一个接口继承了多个接口,如果父接口有相同的抽象方法,子类只继承一个;

默认方法:(通过实现类的对象调用) 好处:解决接口升级

1.实现该接口的实现类可以继承或者重写(根据需求)默认方法,

2. 该类实现了多个接口,继承了多个默认方法,如果有相同的默认方法,实现类必须重写这个方法;

3.一个接口继承了多个接口,这个继承了多个默认方法,如果父接口中有相同的默认方法,那么子接口必须重写这个默认方法(必须带着关键字default);

4.一个类继承了一个父类,并且实现了多个接口,如果父类的方法和接口的默认方法重名,那么优先使用父类的方法;

静态方法:(只能通过接口名调用,如果出现用实现类对象调用,会出现调用的不确定性);

public class Fu {
    public static void methodStatic (){
        System.out.println("静态方法执行了");
    }
}
public class Zi extends Fu {

}
public class Test {
    public static void main(String[] args) {
        Zi z = new Zi();
        z.methodStatic(); /*为什么这儿不会报错呢,因为java是单继承的,
                          子类没有该静态方法,子类含有 super引用,不会出现调用的不确定性,会在父类静态方法区找*/
    }
}
public interface InterfaceA {

    public static void methodStatic(){
        
    }
}
public interface InterfaceB {

   public static void methodStatic(){

   }
}
public class C implements InterfaceA,InterfaceB{
    
}
public class Test {
    public static void main(String[] args) {

        C c = new C();
        //  c.methodStatic();
                          /* 不能用对象调用,因为 C 同时实现了 A和B, A,B中都有同名方法,该调用谁呢?
                              会出现冲突*/


    }
}

私有方法: 在接口内部使用,不能在外部使用;好处:减少代码的书写;

猜你喜欢

转载自blog.csdn.net/yuwotongle1018/article/details/81351992
今日推荐