抽象类和接口的简单使用

 

为了实际开发中的可拓展行,本次内容会简单说明抽象类和接口
抽象方法:不能具体实现的方法同时使用abstract修饰,就是没有方法体
抽象类:不能具体实例化的类,使用abstract修饰

  

 

定义抽象类,定义接口,如果后期需要新增别的方法,也方便后期拓展

抽象类中的抽象方法不是必须的,可有可有
但是存在抽象方法的就必须是抽象类

  

 

 

下面分析一个问题,为什么抽象类无法新建对象?

那是因为抽象类中可能存在抽象方法,抽象方法是没有方法体的,也就是调用抽象方法是没有意义的

抽象类的意义不是创建对象而在于被继承

 

 

接口:比抽象类还抽象的存在

  单继承却是可以多实现

 

抽象类和接口的区别
抽象类使用abstract class修饰
接口使用interface修饰
继承抽象类使用extends,实现接口使用implements
抽象类中可以有构造方法,但是接口不能有构造方法(因为接口中的都是抽象方法)
抽象类中有成员变量,接口中只能有常量

  在jdk1.8中,接口新特性,接口可以增加非抽象方法

 

 

 在jdk1.8中,接口新特性,接口也可以增加静态方法

 

 

 

 一般静态方法多适用于工具类中

 

 抽象类中可以写普通方法,方便普通类去继承

 

 对于java的模板设计模式,是将不同对象相同的共性抽到父类中

 

 

/**
 * 
 */
package com.java.abstracttest;

/**
 * @author yourheart
 * @update 2022年3月29日 下午9:26:04
 * @description:
 */
public abstract class HouseTemplate {

    protected HouseTemplate(String name) {
        this.name = name;
    }

    protected String name;

    protected abstract void buildDoor();

    protected abstract void buildWindow();

    protected abstract void buildWall();

    protected abstract void buildBase();

    // 公共逻辑
    public final void buildHouse() {

        buildBase();
        buildWall();
        buildDoor();
        buildWindow();

    }

}
/**
 * 
 */
package com.java.abstracttest;

/**
 * @author yourheart
 * @update 2022年3月29日 下午9:26:46
 * @description:
 */
public class HouseOne extends HouseTemplate {
    HouseOne(String name) {
        super(name);
    }

    @Override
    protected void buildDoor() {
        System.out.println(name + "的门要采用防盗门");
    }

    @Override
    protected void buildWindow() {
        System.out.println(name + "的窗户要面向北方");
    }

    @Override
    protected void buildWall() {
        System.out.println(name + "的墙使用大理石建造");
    }

    @Override
    protected void buildBase() {
        System.out.println(name + "的地基使用钢铁地基");
    }

}

/**
 * 
 */
package com.java.abstracttest;

/**
 * @author yourheart
 * @update 2022年3月29日 下午9:28:12
 * @description:
 */
public class HouseTwo extends HouseTemplate {

    HouseTwo(String name) {
        super(name);
    }

    @Override
    protected void buildDoor() {
        System.out.println(name + "的门采用木门");
    }

    @Override
    protected void buildWindow() {
        System.out.println(name + "的窗户要向南");
    }

    @Override
    protected void buildWall() {
        System.out.println(name + "的墙使用玻璃制造");
    }

    @Override
    protected void buildBase() {
        System.out.println(name + "的地基使用花岗岩");
    }

}

  

public class Clienter {

    public static void main(String[] args) {
        HouseTemplate houseOne = new HouseOne("房子1");
        HouseTemplate houseTwo = new HouseTwo("房子2");
        houseOne.buildHouse();
        houseTwo.buildHouse();
    }

}

  

 

posted @ 2022-03-29 22:02  不忘初心2021  阅读(52)  评论(0编辑  收藏  举报