2022-7-26 学习日记(16th day)抽象类+接口

目录

抽象:abstract

接口:


在JAVA中除了面向对象的三种特征,还有抽象类和接口

抽象:abstract

在JAVA里,用abstract class来定义抽象类。

抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。

由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。也是因为这个原因,通常在设计阶段决定要不要设计抽象类。

父类包含了子类集合的常见的方法,但是由于父类本身是抽象的,所以不能使用这些方法。

在 Java 中抽象类表示的是一种继承关系,一个类只能继承一个抽象类,而一个类却可以实现多个接口。

抽象方法:没有方法体

那么他存在的意义是什么? 

根本意义:预定、自定义的规则

约定大于配置,配置大于编码

 抽象类:

public abstract class t{}

 那么abstract除了类还能修饰什么呢?

        类,方法。

抽象方法必须在抽象类里,当我们定义了一个抽象类,这个抽象类中可以有哪些结构?

        属性,成员方法,构造器,抽象方法,常量

抽象类中能不能没有抽象方法? 可以,抽象类里可以没有抽象方法,但是希望你没有抽象方法时,别用抽象类

抽象类是不能被实例化的,

抽象类不能创建对象

抽象类的构造器存在的意义: 为了约定子类的构造器必须和父类要匹配

一个类如果继承了一个抽象类,就必须重写这个抽象类所有的抽象方法

抽象方法能不能用private修饰? 

不能,开发中,抽象方法基本上都是public.

抽象方法能不能用final修饰? 

不能,用final修饰的方法不能被重写。 

抽象类能不能用final修饰? 

不能,用final修饰的类是不允许被继承的。 

 

总结一下:

        1.抽象方法必须是public或者protected(因为如果private,不能被子类继承,子类便无法实现该方法),默认情况下是不可以的,(默认情况其实就是public)。

        2.抽象类不能被直接实例化,需要依靠子类采用向上转型的方式处理

        3.抽象类必须有子类,要不然你一点意义都没有,使用extends继承,一个类只能继承一个抽象类。

        4.子类(如果不是抽象类)则必须重写抽象类中的所有抽象方法 如果子类没有实现父类的抽象方法,必须将子类也定义为abstract. 

示例:抽象类:

定义长宽高,定义体积,面积,周长的抽象方法:

public abstract class yuan {
    private Integer chang;
    private Integer kuan;
    private Integer gao;

    public abstract Double area(Double ... args);
    //面积
    public  abstract Double volume(Double ... args);
    //体积
    public  abstract Double perimeter(Double ... args);
    //周长


    public Integer getChang() {
        return chang;
    }

    public void setChang(Integer chang) {
        this.chang = chang;
    }

    public Integer getKuan() {
        return kuan;
    }

    public void setKuan(Integer kuan) {
        this.kuan = kuan;
    }

    public Integer getGao() {
        return gao;
    }

    public void setGao(Integer gao) {
        this.gao = gao;
    }
}

 继承的类:

!!!必须重写所有方法!!!

public class rectangle extends yuan{
    @Override
    public Double perimeter(Double ... args){
     return null;
    }
    @Override
    public Double area(Double ... args){
        //面积
        if(args.length>1){
            throw new RuntimeException("只能传入一个参数");
        }
        return 3.14*args[0]*args[0];
    }
    @Override
    public Double volume(Double ... args) {
        return null;
    }
}

 接口:

接口是什么呢?

接口就是比抽象更抽象的东东。

接口是怎么使用的呢:

把class关键字替换成interface关键字

public interface test01{}

声明:

JDK1.7之前:接口中只能定义抽象方法,不能有属性,不能有方法,只能有抽象方法

                        (静态的常量)

JDK1.8及以后:接口中只能定义抽象方法,不能有属性,不能有方法,可以有默认方法和

                        静态方法,静态常量。 

接口中结构的特点:

接口中的抽象方法,默认就是public abstract,我们推荐就省略了;

接口中的常量,默认就是public static final,我们也推荐省略。

说一句话:接口中的结构必须是public也只能是public

接口可以被实现:叫“实现类”

        比如说A类 implement 接口,那我们就说A是这个接口的实现类

实现接口是可以多实现的,但是继承只能单继承

我们在开发中,一件事可以通过继承和实现接口来解决问题,优先使用接口解决问题。

由于JAVA单继承中的存在,我们在开发中,使用继承一定小心小心再小心

多态的前提:

  1. 继承,实现
  2. 重写方法
  3. 父类-->子类,接口-->实现类 

在JAVA中只有单继承?

在JAVA中是存在多继承的,只能发生在接口之间。比如说新建了四个接口:ABCD,A可以继承BCD

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值