开始在CSDN记录学习内容+抽象类 2021-07-22java学习日记

本文介绍了Java中抽象类的概念、定义、特点和使用,包括抽象类的继承、final和abstract的组合限制,以及抽象方法的定义和在面向抽象编程中的应用。通过实例演示了如何在代码中实现抽象类和抽象方法,并讨论了一个编程实践中的常见面试问题。
摘要由CSDN通过智能技术生成

7.22Java进阶P493-P498

关键词: 开始CSDN记录 abstract 类

抽象类:

1.什么是抽象类?

抽象类无法实例化,无法创建对象
抽象类是类和类之间有共同特征,将这些具体共同特征的类再进一步抽象,就形成了抽象类。 由于类本身是不存在的,因此抽象类无法创建对象
例:
在这里插入图片描述

抽象类和抽象类可能还有特征,还可以进一步抽象。

2.抽象类属于什么类型
抽象类属于引用数据类型。
3.抽象类怎么定义

(修饰符列表) abstract class 类名{
类体;
}

子类继承抽象类,继承之后可以创建对象

4.final和abstract 无法共存,非法的修饰组合
5.抽象类的子类可以是抽象类,也可以是非抽象类
6.抽象类虽然无法实例化,但抽象类是否有构造方法?
有,这个抽象方法是提供给子类使用的,无参的构造第一行什么都没写的话,默认有一个super(),

回顾:不写默认给个无参构造

7.抽象类关联到一个概念:抽象方法。什么是抽象方法呢?

抽象方法表示没有实现的方法,没有方法体的方法。
例:
Public abstract void dosome();
抽象方法特点:
特点1:没有方法体,以分号结尾
特点2:前面修饰符列表用abstract

8.(重要结论)抽象类中不一定要有抽象方法,但是抽象方法必须要出现在抽象类中。

若非抽象的子类继承了抽象的方法,若没有对抽象方法重写,那便会报错。
因此重要结论:
一个非抽象的类继承了抽象类,必须将抽象类的抽象方法实现了
这是java语法强行规定的,不然编译器就报错了
这里的覆盖,或者重写,这里也可以叫做实现
若子类也是抽象的,那么也可以不用重写/覆盖/实现。
面向抽象编程:
下面看写的一个自己练习的小例子

public class AbstractTest {
    public static void main(String[] args) {
        //能不能使用多态?
        //父类型指向子类型引用对象。

        Animal a = new Bird();//向上转型。
        //这就是面向抽象编程。
        //以后你都是调用a.XXXX
        //a的类型是Animal,Animal是抽象的
        //面向抽象编程,不要面向具体编程,降低程序的耦合度,提高程序的扩展性
        //这种编程思想符合OCP原则。
        /*
           分析以下:
              编译的时候这个move()方法是谁得?
              Animal的
              运行的时候这个move()方法又是谁的?
              Brid的

        */
        a.move();
        Animal b = new Cat();
        b.move();

    }
}

abstract class Animal{
    //抽象方法
    public abstract void move();
}

class Bird extends Animal{
    public void move(){
        System.out.println("鸟儿在飞翔");
    }
}
class Cat extends Animal{
    public void move(){
        System.out.println("猫儿在走猫步");
    }
}

运行截图:
在这里插入图片描述

穿插一个java面试题
java语言中凡是没有方法体的都是方法都是方法
答:不对,错误的。
Object类中就有很多方法都没有方法体的,都是以;结尾的,但他们都不是抽象方法,例如:
Public native int hashCode();
这个方法调用了C++写的动态链接库程序。
前面修饰符列表没有:abstract 有一个native,表示调用JVM本第程序

心得小总结:
  今天开始了在CSDN记录我的学习java的过程,写博客的时候也是一个复习的过程,加深学习记忆,也方便于以后来回顾,自己写的东西比起来网上的知识点,肯定会更容易回忆起来,最近的睡眠时间比较晚,今天开始调整的比较早一点,因为今天开始还上传了一些前面天的博客,所以今天的学习内容比较少,以后准备上传的博客是一段比较完整的内容,不要今天学习一半接口明天一半接口这样,因此今天也学了点接口的内容打算在明天发布。最后,希望可以坚持!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值