专业的JAVA编程教程与资源

网站首页 > java教程 正文

Java学习:基础(抽象类、模板方法模式、接口)

temp10 2024-10-04 12:28:30 java教程 8 ℃ 0 评论

抽象类

  • 关键字abstract,可修饰类、成员方法
  • abstract修饰类为抽象类,修饰方法为抽象方法
  • 抽象方法只有方法定义,不能实现方法体
  • 类中声明了抽象方法,该类必须声明成抽象类
  • 抽象方法具体实现由子类完成,子类必须完成父类中的抽象方法
  • 抽象类中不一定有抽象方法,但有抽象方法的类必须是抽象类
  • 类中有的成员,抽象类中都有
  • 抽象类不能创建对象
/**
 * 抽象类定义
 */
abstract class Animal {
    /**
     * 定义抽象方法
     */
    public abstract void run();
}

/**
 * 子类继承抽象类
 */
class Dog extends Animal {

    @Override
    public void run() {
        System.out.println("小狗跑起来了");
    }
}

模板方法模式

Java学习:基础(抽象类、模板方法模式、接口)

  • 功能定义成模板方法,放在抽象类中,模板方法中只定义通用且能确定的代码
  • 模板方法中不能确定的工能定义成抽象方法,子类去实现
public class AbstractDemo1 {
    public static void main(String[] args) {
        Bmw b = new Bmw();
        b.run();// 返回 BMW跑起来了

        Bc bc = new Bc();
        bc.run();// BC跑起来了
    }
}

/**
 * 定义抽象模板
 */
abstract class Car {
    
    // 确定功能定义模板方法
    public final void run() {
        String name = name();
        System.out.println(name+"跑起来了");
    }
    
    // 不确定功能定义抽象方法
    abstract String name();
}

/**
 * 定义子类
 */
class Bmw extends Car {

    @Override
    String name() {
        return "BMW";
    }
}

/**
 * 定义子类
 */
class Bc extends Car {

    @Override
    String name() {
        return "BC";
    }
}

接口

  • interface关键词定义接口
  • 一个类实现多个接口,接口中有同样的静态方法不冲突(接口的静态方法只有自己调用
  • 一个类继承了父类,同时又实现了接口,父类和接口有同名方法,默认使用父类的
  • 一个类实现了多个接口,接口中存在同名方法,不冲突,但实现类必须重写同名方法
  • 一个接口继承多个接口,多接口中同名方法,修饰必须相同
  • jdk1.8之前接口中只能定义常量和抽象方法
/**
 * 定义接口
 * 由于接口体现规范,所以修饰符可以省略
 */
interface People {
    // 定义常量
    public static final String NAME = "名称";
    String USERNAME = "用户名";

    // 定义抽象方法
    public abstract void run();
    void start();
}
  • 接口必须被实现,implements关键词实现,可以多继承整合接口
interface ManPeople {
    void run();

}

interface WomanPeople {
    void eat();

}

/**
 * 接口可以多继承
 */
interface NeutralPeople extends ManPeople,WomanPeople{
    void sleep();
}

class Xiao implements NeutralPeople {

    @Override
    public void run() {
        System.out.println("跑");
    }

    @Override
    public void eat() {
        System.out.println("吃");
    }

    @Override
    public void sleep() {
        System.out.println("睡觉");
    }

}
  • jdk1.8之后接口新增方法,默认public修饰

① 默认方法default

② 静态方法,,必须接口名调

③ 私有方法, 必须接口内部访问 jdk1.9支持

public class InterfaceDemo1 {
    public static void main(String[] args) {
        People p = new People();
        p.run();
        Man.woman();

    }
}

interface Man {
    // 默认方法
    default void run() {
        System.out.println("默认方法");
        Neutral();
    }

    // 静态方法,必须接口名调
    static void woman() {
        System.out.println("静态方法");

    }

    // 私有方法, 接口内部访问 jdk1.9支持
    private void Neutral() {
        System.out.println("私有方法");
    }
}

class People implements Man {

}

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表