接口与抽象类:区别、匿名类实现与继承、使用场景

200 阅读1分钟

抽象类

抽象类和普通类的主要有三点区别:

  • 1)抽象方法必须为 public 或者 protected(因为如果为 private,则不能被子类继承,子类便无法实现该方法),默认情况下默认为 public。
  • 2)抽象类不能用来创建对象;
  • 3)如果一个类继承于一个抽象类,则子类必须实现父类的抽象方法。如果子类没有实现父类的抽象方法,则必须将子类也定义为为 abstract 类。
  • 在其他方面,抽象类和普通的类并没有区别。
public abstract class TestDemo {
​
    public String name;
    
    public abstract void print();
​
    public void method(){
​
    }
}
public static void main(String[] args) {
        TestDemo testDemo = new TestDemo() {
            @Override
            public void print() {
                //实现具体内容
            }
        };
        
        
    }
    
    //传入的参数应该是抽象类的继承类
    public void method(TestDemo testDemo) {
        testDemo.print();
    }

此处的实例化是Java的匿名类,其作用相当于创建一个匿名类继承了TestDemo抽象类。

testDemo是一个匿名类的实例对象,而不是TestDemo的实例对象。

接口

接口中可以含有 变量和方法

  • 接口中的变量会被隐式地指定为 public static final 变量
  • 方法会被隐式地指定为 public abstract 方法且只能是 public abstract 方法

与抽象类例子相似,接口也可以用匿名类实现,抽象类则是有匿名类继承。

如何决定使用抽象类还是接口

image.png