Java 中没有抽象方法的抽象类的由来

一个类中的所有方法为抽象方法则可以把这个类定义为抽象类(此时类中的抽象方法格式书写默认)

抽象类中可以不定义抽象方法

抽象类不能创建对象

方法全为抽象方法的抽象类——接口(接口中的方法的格式都是默认好的)

【没有抽象方法的抽象类的由来】

package Exercises;

/*
//没有抽象方法的抽象类的由来
抽象类中可以不定义抽象方法,之所以定义为抽象类是为了使这个类不能创建对
 */
interface Inter{
    //四种显示方式
    public void show1();
    public void show2();
    public void show3();
    public void show4();
}
//定义子类,要使用第一种显示方式
class InterIMPL1 implements Inter{
    public void show1(){
        System.out.println("show1 run....");
    }
    //仅仅实现show1 是不正确的(仅实现显示1 InterIMPL 相当于还是一个抽象类)为了使该类实例化,还要覆盖其他三个方法
    //实现其他的抽象方法
    public void show2(){}
    public void show3(){}
    public void show4(){}

}
//定义子类,要使用第四种显示方法
class InterIMPL2 implements Inter{
    public void show4(){
        System.out.println("show4 run...");
    }
    public void show1(){}
    public void show2(){}
    public void show3(){}
}
/*
这样调用出现的问题
当实现接口中的部分功能时,在两个实现中都有代码重复的部分,大大减小了的代码的复用性
解决方式:
抽取实现类中的共同部分,组成一个类
具体思想:用一个类来空实现接口中的所有方法,再用不同的类通过继承来重写实现类中的方法,加大代码的复用性
 */
abstract class InterIMPL implements Inter{  //将接口空实现,定义为一个没有抽象方法的抽象类——无法定义对象
    public void show1(){}
    public void show2(){}
    public void show3(){}
    public void show4(){}
}
class InterIMPL3 extends InterIMPL{
    public void show1(){
        System.out.println("show1 run!!!!!!");
    }
}
class InterIMPL4 extends InterIMPL{
    public void show4(){
        System.out.println("show4 ru!!!!!!");
    }
}
public class interfaceDemo {
    public static void main(String[] args){
        InterIMPL1 in1=new InterIMPL1();
        in1.show1();
        InterIMPL2 in2=new InterIMPL2();
        in2.show4();
        InterIMPL3 in3=new InterIMPL3();
        in3.show3();
        InterIMPL4 in4=new InterIMPL4();
        in4.show4();
    }
}

//解决问题:只是用接口中的部分功能,提高代码的复用性,

具体:用一个类去空实现接口,再用具体实现的子类继承实现类,重写实现类中的方法。创建子类的对象就可以调用对应的方法

猜你喜欢

转载自blog.csdn.net/stitch__/article/details/80293195