展开
拓展 关闭
订阅号推广码
GitHub
视频
公告栏 关闭

抽象类和接口

抽象类

  • 抽象类语法:
/*
*在class之前加上abstract关键字
*/
public abstract class Aminal {

}
  • 抽象方法:
/*
*没有方法体为抽象方法,且需要在返回值类型前加上abstract关键字
*/
public abstract class Aminal {
    
    abstract void eat();

    abstract void sleep();

    //这是普通的方法
    void info(){

    };

}
  • 抽象类的继承:
/*
*子类继承抽象类,必须重写父类的抽象方法
*/
public class Dog extends Aminal0 {

    //重写时需加上注解标记
    @Override
    void eat(){
        System.out.println("重写eat()");
    }

    @Override
    void sleep(){
        System.out.println("重写sleep()");
    }

}
  • 抽象类不能被实例化
public class Test1 {
    public static void main(String[] args) {
        //下面的语句是会报错的:'Aminal' is abstract; cannot be instantiated   “动物”是抽象的;无法实例化
        //Aminal aminal = new Aminal();
    }
}
  • 抽象方法的访问修饰符只能是public protected 默认
public abstract class Aminal {

    public abstract void eat();

    protected abstract void sleep();

    abstract void fight();

    //下面这条语句是会报错的:Illegal combination of modifiers: 'abstract' and 'private'   修饰语的非法组合:“抽象”和“私有”
    //private abstract void fight();

}

接口

  • 接口的语法:
/*
*使用interface关键字
*/
public interface Aminal {

}
  • 接口内的抽象方法不能用protected private修饰
/*
*编译器会自动加上public static,可省略
*/
public interface Aminal {

    //接口内只能是抽象方法
    public abstract void eat();
    
    void sleep();

    //这里会报错:Modifier 'protected' not allowed here   此处不允许修饰符“受保护”
    //protected void sleep();

    //这里会报错:Modifier 'private' not allowed here   此处不允许使用修饰语“私人”
    //private void fight();

}
  • 接口内定义的变量必须初始化
public interface Aminal {

    //接口内的变量必须初始化为常量,编译器会默认加上public final,可省略
    double weight = 0;

    public final int height =  5;

    //加上default关键字,可定义defau方法;在实现该接口时不需要覆写default方法
    default void fight(){
        System.out.println(weight);
    };

}
  • 接口不能被实例化

  • 接口继承接口

/*
*使用extends关键字,接口可继承多个接口,但不能继承类
*/
public interface Dog extends Aminal,intFacTest{

}
  • 实现接口
/*
*使用implement关键字,可同时实现多个接口,用逗号分隔
*/
public class Dog extends Aminal03 implements Aminal01,Aminal02{

    //实现接口必须重写接口内的抽象方法
    @Override
    public void eat() {
        
    }

    @Override
    public void sleep() {

    }

}
posted @ 2021-03-03 15:30  DogLeftover  阅读(103)  评论(0编辑  收藏  举报