一个类中的所有方法为抽象方法则可以把这个类定义为抽象类(此时类中的抽象方法格式书写默认)
抽象类中可以不定义抽象方法
抽象类不能创建对象
方法全为抽象方法的抽象类——接口(接口中的方法的格式都是默认好的)
【没有抽象方法的抽象类的由来】
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();
}
}
//解决问题:只是用接口中的部分功能,提高代码的复用性,
具体:用一个类去空实现接口,再用具体实现的子类继承实现类,重写实现类中的方法。创建子类的对象就可以调用对应的方法