当前位置: 首页 > news >正文

Java进阶学习笔记13——抽象类

认识抽象类:

当我们在做子类共性功能抽取的时候,有些方法在父类中并没有具体的体现,这个时候就需要抽象类了。在Java中,一个没有方法体的方法应该定义为抽象方法,而类中如果有抽象方法,该类就定义为抽象类。

在Java中有一个abstract,它是抽象的意思,可以用它修饰类、成员方法。

package cn.ensource.d4_abstract;// 抽象类
public abstract class A {// 抽象方法,必须用abstract修饰,并且只有方法签名,不能有方法体public abstract void run();
}

我们要注意的是:

抽象类不能创建对象。 

 A 是一个抽象类,不能被实例化。

抽象类仅作为一种特殊的父类,让子类继承并实现。

 A 类:

package cn.ensource.d4_abstract;// 抽象类
public abstract class A {private String name;public static String schoolName;public A() {}public A(String name) {this.name = name;}public String getName() {return name;}public void setName(String name) {this.name = name;}public static String getSchoolName() {return schoolName;}public static void setSchoolName(String schoolName) {A.schoolName = schoolName;}// 抽象方法,必须用abstract修饰,并且只有方法签名,不能有方法体public abstract void run();
}

B类:

package cn.ensource.d4_abstract;// 抽象类:一个类继承了抽象类,必须重写完抽象类的全部抽象方法
public class B extends A{@Overridepublic void run() {System.out.println("B run");}
}

测试类:

package cn.ensource.d4_abstract;public class Test {public static void main(String[] args) {// 目标:认识抽象类和其特点// 注意:抽象类不能创建对象
//        A a =  new A();B b = new B();b.run();}
}

抽象类的场景和好处:

也就是说:所有子类都要完成这个方法。那我们在父类中抽象出这个抽象方法。

实现行为多态。

抽象类不是不能调用方法,是不能创建对象。

使用了抽象类,更专业,多态会更好!

强制子类重写方法。

abstract类:

package cn.ensource.d4_abstract2;public abstract class Animal {private String name;public abstract void cry();  // 让子类都进行重写方法,由子类实现,对多态支持更好public String getName() {return name;}public void setName(String name) {this.name = name;}
}

 Cat类:

package cn.ensource.d4_abstract2;public class Cat extends Animal{@Overridepublic void cry() {System.out.println("喵喵~");}
}

Dog类:

package cn.ensource.d4_abstract2;public class Dog extends Animal{@Overridepublic void cry() {System.out.println("旺旺~");}
}

测试类:

package cn.ensource.d4_abstract2;public class Test {public static void main(String[] args) {// 掌握抽象类的好处Animal a = new Cat();a.setName("叮当猫");a.cry();       // 更好地支持了多态System.out.println(a.getName());}
}

抽象类的应用场景和超出是什么?

父类知道每个子类都要做某个行为,但每个子类要做的情况不太一样,父类就定义成抽象方法,交给子类去重写实现。我们抽象出来的抽象类,就是为了更好地支持多态。

抽象类我们不是非要用的。强制子类重写。

用抽象类是最佳实践,不用也是可以的。但是使用是最佳实践。 

抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类。

抽象类是不能实例化的:

抽象类如何实例化呢?参照多态的方式,通过子类对象实例化,这叫抽象类多态。

抽象类的子类:

要么重写抽象类中的所有抽象方法。

要么是抽象类。

http://www.lryc.cn/news/353321.html

相关文章:

  • 【Docker学习】深入研究命令docker exec
  • C语言中的文件操作
  • python使用xlrd读取excel的时候把字符串读成了数字
  • 【C语言】走进指针世界(下卷)
  • 【Spring】SSM整合_入门代码实现
  • C++代码错误解决1(函数模板)
  • idea configuration 配置 方便本地启动环境切换
  • win10配置wsl的深度学习环境
  • 如何处理时间序列的缺失数据
  • fastapi中实现多个路由请求
  • 前端框架选择指南:React vs Vue vs Angular
  • 猫头虎 解析:为什么AIGC在国内适合做TOB,在国外适合做TOC?
  • 并发编程笔记8--ThreadLocal结构详解
  • 强烈推荐 20.7k Star!企业级商城开源项目强烈推荐!基于DDD领域驱动设计模型,助您快速掌握技术奥秘,实现业务快速增长
  • 【C++STL详解(四)------vector的模拟实现】
  • 租赁系统|北京租赁系统|租赁软件开发流程
  • JAVA面试题大全(十四)
  • Web Accessibility基础:构建无障碍的前端应用
  • 谈谈你对 SPA 的理解?
  • JAVA给一个JSON数组添加对象
  • 设计一个完美的用户角色权限表
  • Git 基本使用
  • LabVIEW使用PID 控制器有哪些应用场景?
  • UTC与GPS时间转换-[week, sow]
  • JVM性能调优:内存模型及垃圾收集算法
  • 不靠后端,前端也能搞定接口!
  • 如何秒杀Promise面试题
  • linux文件权限常用知识点,基于Linux(openEuler、CentOS8)
  • 【前端笔记】记录一个能优化Echarts Geo JSON大小的网站
  • 车与网络之间(V2N)简介