java第一阶段-JavaSE-Day11-抽象类、接口

本文介绍了Java中的抽象方法、抽象类和接口概念,阐述了它们在代码设计中的应用,包括抽象类的定义、抽象方法的作用,以及模板设计模式如何通过抽象类模板和接口来实现代码复用和解耦。同时讨论了接口的规则定义、实现方式及其在类中的应用实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、抽象类

(一)抽象方法

        1.概述

        java中只有方法声明没有方法实现且被关键字abstract修饰的方法就是抽象方法。

        abstract:关键字,表示抽象的含义,被他修饰的资源自然而变成抽象的。

        2.格式

        修饰符 abstract 返回值类型 方法名 (参数列表);

        3.作用

        提取相同功能不同结果的方法的声明,用来需要定义一个这样的方法名字,但是不提供方法是想,以后谁想用这个方法,那就自己提供方法的实现。

        4.注意

        只能定义在抽象类和接口中

(二)抽象类

        1.概念

                1)属于类的一种,属于特殊的类

                2)java中被关键字abstract修饰的类就是抽象类

        2.格式

                修饰符 abstract class 类名{

                        抽象类能出现的内容和普通类一样,只是多了抽象方法

                }

        3.内容

                1)属性

                2)行为

                3)构造方法

                4)抽象方法

        4.普通行为

                1)普通方法

                2)静态方法

                5.特殊行为

        抽象方法 抽象类中一般都会定义抽象方法,如果不定义抽象方法,直接定义为普通方法

public abstract class Person {
    private String name;
    public static String color = "淡黄色";

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public static String getColor() {
        return color;
    }

    public static void setColor(String color) {
        Person.color = color;
    }

    public Person(){};

    public Person(String name){
        this.name = name;
    }
//抽象方法,没有{}没有方法体
    public abstract void eat();

    public abstract void drink();
}
public class Student extends Person {

    public Student(){}

    public Student(String name){
        super(name);
    }
    @Override
    public void eat() {
        System.out.println("吃饭");
    }

    @Override
    public void drink() {
        System.out.println("喝水");
    }
}
public class UseStudent {
    public static void main(String[] args) {
        Student s = new Student();
        s.eat();
        s.drink();

        Student s2 = new Student("张三");
        System.out.println(s2.getName());
        s2.eat();
        s2.drink();

    }
}

        6.特点

                1)有构造方法但是不能创建对象,抽象类不能实例化

                抽象类天生就是用来当父类的

                2)构造方法给子类创建对象的时候调用使用,通过super语句使用抽象类中的构造方法

                3)他的抽象方法不必须被子类重写,而且要重写全部的抽象方法。一个普通的类如果继承了抽象类,那么这个类在继承抽象类之后就必须重写抽象方法。

        7.抽象类和抽象方法的关系

                1)抽象类不一定有抽象方法

                2)有抽象方法的类一定是抽象类

二、模板设计模式

        1.设计模式的概念

        设计模式是一套反复使用,多人知晓,经过分类的代码设计经验的总结。

        代码使用设计模式的目的:为了重用代码、让代码更容易被别人理解,保证代码的可靠性和程序的重要性

        java中有很多的设计模式,一共23种,每一种都是用来解决某一个方向问题的固定解决方案,也是最优解决方案。

        2.模板设计模式

        把抽象类整体看成一个模板,模板中不能决定的步骤使用抽象方法表示步骤方法。

        意图:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,模板方法使得子类可以不改变一个算法的结构下,即可重新定义该算法的某些特定的步骤。

        主要解决:一些方法通用,却在每一个子类中都重写的这一方法的问题。

        例子:

        发现做菜的流程都一样,我们就可以把做菜的流程做成一个模板

        模板类:

public abstract class Cooking {

    public final void cookie(){
        prepareMaterial();
        putOil();
        fire();
        addMaterial();
        striFry();
        outPot();
    }

    public abstract void prepareMaterial();

    public void putOil(){
        System.out.println("放油");
    }

    public  void fire(){
        System.out.println("开火");
    }

    public abstract void addMaterial();

    public void striFry(){
        System.out.println("翻炒");
    }

    public void outPot(){
        System.out.println("出锅");
    }
}

子类:

public class HongShaoRou extends Cooking {
    @Override
    public void prepareMaterial() {
        System.out.println("五花肉");
    }

    @Override
    public void addMaterial() {
        System.out.println("加肉");
    }
}

主类:

public class Main {
    public static void main(String[] args) {
        HongShaoRou hsr = new HongShaoRou();
        hsr.cookie();
    }
}

三、接口——java中的一种引用类型

        1.概述

        接口本身是对规则定义的一种集合体(接口中定义的都是规则)

        规则:指定的一种固定标准[行为规范]

        比如:婚姻法的一夫一妻制

        电脑的USB接口( 电脑厂商制定USB结构规则,设备要多长, 多宽,怎么排线)

        规则只是声明了行为,没有指定具体的行为内容

                --java中规则就是行为,[方法]的声明

                --规则就变为方法的声明,规则其实就是java中的抽象方法

        接口其实就可以理解为是定义抽象方法的集合体

        作用:对外公开功能[规则],让大家想要使用该功能必须来实现接口,重写接口中抽象方法

        好处:可以实现解耦合的作用

        2.接口的定义及特点

        1)格式:

                使用关键字interface来定义

                修饰符 interface 接口名{

                        接口的内容(抽象方法)

                }

        2)内容特点

                ①属性 ----也是使用变量体现 默认被public static final 修饰

                ②行为:只有抽象方法

        3)注意事项:

                ①没有构造方法

                ②不能直接创建接口对象

                ③接口可以直接使用接口的静态常量属性

                ④接口是用来实现的,也就是水箱成为符合接口声明抽象方法对象,谁来是想这个接口

public interface Inter1 {
    public static final int MAX=100;
    public abstract void speak();
    public abstract void eat();
    public abstract void drink();


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

    @Override
    public void drink() {
        System.out.println("喝");
    }

    @Override
    public void speak() {
        System.out.println("说");
    }
}
public class UseStudent {
    public static void main(String[] args) {
        Student s = new Student();
        System.out.println(s.MAX);
        s.drink();
        s.eat();
        s.speak();
    }
}

        3.接口的实现

        ·概述

        接口中的规则描述的只有声明没有具体的内容,想要被使用必须把要求的内容描述具体,只能通过类对接口规则的描述进行补充,类就和接口产生关系,这种关系就叫做实现关系:类通过implements 关键字连接接口,就可以对接口的规则进行补充。把这种类连接接口的方式叫做接口的实现

        注意:

        类对接口进行规则的补充,类自然而然的有了接口描述的规则的功能,而且类必须实现接口中所有抽象方法.

        大白话:一个实现接口,就要把对接口所有抽象重写,(- 一个实现一个接口 就相当于继承了这个接口);

        ·如何实现接口

        类通过implements 关键字连接接口

        格式:

                修饰符 class 类名 implements 接口1,接口2,...{

                        类的内容

                }

        分类:

                单实现:一个类实现一个接口

                多实现:一个类实现多个接口

        一个普通类实现接口之后必须重写接口中所有的抽象方法

        4、类与类、类与接口,接口与接口之间的关系(简答题)

        类与类:

                只能是继承关系

                java中的类继承只支持单继承和多层继承,不支持多继承

        类与接口:

                只能是实现关系,一个类实现某个接口,就相当于继承了这个接口

        接口与接口:

                继承关系:

                java中接口继承支持所有继承方式

                单继承 A接口继承B接口

                多层继承 A接口继承B接口 B接口继承C接口

                多继承 A接口继承B,C,D,...接口,一个接口可以继承多个接口,即使多个父接口 有相同的抽象方法,子接口相当于只继承了一个抽象方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

皇正经

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值