多态继承

第一步我们新建一个接口A类

package InterfaceText;

public interface A { //定义一个接口
    public void g (); //定义接口方法
}

第二步:新建一个B类,这个B类实现A这个接口 并抽象化

package InterfaceText;

public abstract class B implements A{
	/*
	 * zdy()是在B类自定义的一个方法
	 * 但不要忘记了他还实现了一个接口。
	 * 当调用这个B类的时候,要实现接口中的类。可以看到下面的第三步。他继承了B类。
	 */
		public void zdy() {
			System.out.println("我是一个教授,我白天教书");  
		}	
}

  

第三步:我们新建一个Doctor1这个类并继承B这个类,因为继承B类这个类了,那这个B里面自定义的类属性也继承了,就不用重写了。

package InterfaceText;

public class Doctor1 extends B{

    public void g() {
        System.out.println("到了晚上我就睡觉");
    }

}

 

第四步:我们在新建一个Doctor2 和第三步一样;

package InterfaceText;

public class Doctor2 extends B{

    public void g() {
        System.out.println("到了晚上我就去玩");
    }

}

第五步:我们新建一个测试类main

package InterfaceText;

public class main1 {

    public static void main(String[] args) {
        Doctor1 d1 = new Doctor1();
        d1.zdy();
        d1.g();
        
        System.out.println("--------------------");
        Doctor2 d2 = new Doctor2();
        d2.zdy();
        d2.g();
    }
}

我们看一下运行结果:

  

白天都是教书,但晚上就有很多种“态"了。

那这样问题就来了,如果有很多个教授是不是要写很多个Doctor3,4,5,6...个这样的类呢,显然这样不好;

  那么我们再改进一下代码;我们不写Doctor这样的类了。我们直接在main这个测试类里写一个方法; 

package InterfaceText;

public class main1 {

    public static void main(String[] args) {
        Doctor1 d1 = new Doctor1();
        d1.zdy();
        d1.g();
        
        System.out.println("--------------------");
        Doctor2 d2 = new Doctor2();
        d2.zdy();
        d2.g();
        
        System.out.println("--------------");
        B B1= new B(){
            public void g() {
                System.out.println("我晚上什么都不干");
            }
        };
        B1.zdy();
        B1.g();
        
    
    }

}

上面蓝色加粗的代码块里 我们直接调用 B方法就可以了。

 

这些笔记只是博主的一个课堂的笔记,还是有很多不足,欢迎留言批评指教。。

原文地址:https://www.cnblogs.com/896240130Master/p/6069925.html