一、抽象类的概念

C extends B, B extends A 在继承过程中,形成了一个继承金字塔。位于金字塔底部的类越来越具体(强大),位于金字塔顶部的类越来越抽象(简单)。

例如:人类继承于(属于)动物类,鱼类继承于(属于)动物类。人类有睡觉(闭眼睡)的方法,鱼类有睡觉(睁眼睡)的方法。动物类也有睡觉的方法,但动物类是人类和鱼类的父类,因此形容动物类睡觉的方法过于抽象,不确定如何去形容,此时可以将动物类睡觉方法定义为抽象方法。

即,当一个类中的方法过于抽象时,不确定如何去实现,此时可以把该方法定义为抽象方法。

抽象方法所在的类过于抽象,称为抽象类(abstract class)。写法如下

public abstract class 类名{

}

二、抽象类的特性

[1]抽象类过于抽象,不能实例化(实例化后无语义)。

public abstract class Animal{

private String name;

public void setName(String name){

this.name = name;

}

public String getName(){

return this.name;

}

public Animal(){

}

public Animal(String name){

this.name = name;

}

public void sleep(){

}

}

[2]如果一个方法过于抽象,无法实现,则需要把该方法定义为抽象方法。写法如下

public abstract void sleep();

抽象方法一定位于抽象类中。

抽象方法没有方法体。

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

package cn.exercises01;

public abstract class Moto {

//定义子类中共有的属性

private String no;

private String brand;

//设置属性访问

public String getNo() {

return no;

}

public void setNo(String no) {

this.no = no;

}

public String getBrand() {

return brand;

}

public void setBrand(String brand) {

this.brand = brand;

}

//无参构造

public Moto() {

super();

}

//有参构造

public Moto(String no, String brand) {

super();

this.no = no;

this.brand = brand;

}

//抽象方法

public abstract int eachRates(int days);

}

[3]子类继承抽象类,一定要根据自身情况重写抽象类的抽象方法,除非子类也是抽象类。

package cn.exercises01;

import static cn.exercises01.CarType.*;

//定义子类Car继承于父类

public class Car extends Moto {

// 设置子类Car自己的属性

private String type;

// 设置访问属性

public String getType() {

return type;

}

public void setType(String type) {

this.type = type;

}

// 无参构造

public Car() {

super();

}

// 有参构造

public Car(String no, String brand, String type) {

super(no, brand);

this.type = type;

}

//继承抽象类,抽象方法重写

public int eachRates(int days) {

int money = 0;

String info = super.getBrand() + this.type;

if (info.equals(BUCK_GL8)) {

money = days * 600;

} else if (info.equals(BMW_550I)) {

money = days * 500;

} else if (info.equals(BUCK_ROAD)) {

money = days * 300;

}

return money;

}

}

三、重写和实现

重写(override):当子类继承父类的方法不能满足其自身的需要时,子类重写父类的同名方法。

实现(implement):子类继承抽象父类时,一定要重写父类的抽象方法,此时父类的抽象方法没有方法体,也即没有实现;子类一定重写父类的抽象方法也即实现了父类的抽象方法。

实现是一种特殊的重写。实现建立在重写的继承上

四、Final关键字

final 是一个java的关键字,用于修饰局部变量、属性、方法、类,表示最终的意思。

[1] final修饰类表示最终类,无法被继承。

[2] final修饰符方法,方法就不能被重写。

[3] final 修饰属性,经常和static搭配使用,形成静态常量。

[4] final修饰变量

final 修饰基本数据类型 ,表示a中的内容(值)不能被改变,

final int a = 10;

final 修饰引用数据类型,表示person中的内容(地址)不能被改变。

java抽象类的属性_JAVA 抽象类相关推荐

  1. java抽象类的属性_java抽象类详解

    前言 在没讲抽象类之前  我们先来看看 final关键字 final 修饰符 可以修饰 类.属性.方法 修饰类时  表示该类不能被继承   其他特征 跟普通的类一样 修饰 属性时 表示 改属性不能改变 ...

  2. java 定义抽象变量_Java抽象类和抽象方法定义与用法实例详解

    本文实例讲述了Java抽象类和抽象方法定义与用法.分享给大家供大家参考,具体如下: 一.Java抽象类 1.抽象类的说明 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都 ...

  3. java enum 定义属性_java enum(枚举)使用详解 + 总结

    enum 的全称为 enumeration, 是 JDK 1.5  中引入的新特性,存放在 java.lang 包中. 下面是我在使用 enum 过程中的一些经验和总结,主要包括如下内容: 8. 总结 ...

  4. 时间日期类JAVA包含地区属性_Java常用类 | 时间和日期类

    开发中经常涉及到时间与日期,记录下Java中与时间和日期相关的API JDK8之前与时间日期相关的类 java.lang.System类 System类提供了一个公共的静态方法currentTimes ...

  5. java接口与抽象类的优缺点_java抽象类与接口的比较

    l  语法: 抽象类: 1.如果一个类中有个方法时被声明为抽象方法,那么本类需要用abstract关键字声明: 2.抽象类的成员属性跟普通类没什么区别: 3.抽象类不能被直接实例化: 4.抽象类中的抽 ...

  6. java抽象类的实现_JAVA抽象类和抽象方法(abstract)

    一.抽象(abstract)的使用 当父类的某些方法不确定时,可以用abstract关键字来修饰该方法[抽象方法],用abstract来修饰该类[抽象类]. 我们都知道,父类是将子类所共同拥有的属性和 ...

  7. java抽象类实现接口_Java——抽象类实现接口

    在Java中,使用抽象类来实现接口,并不是毫无作用.相反,有时间有很大的作用. 当你只想实现接口中的个别方法(不是所有方法)时,你可以先写一个抽象类来实现该接口,并实现除了你想要的方法之外的所有方法( ...

  8. java抽象类和接口_Java抽象类和接口类

    Java中接口和抽象类的区别是什么?什么时候用接口?什么时候用抽象类?抽象类和接口存在的意义是什么?能解决哪些编程问题? 1)类关键字修饰符: 抽象类使用abstract修饰,含有抽象方法(使用abs ...

  9. java遍历对象属性_java开发中遍历一个对象的所有属性并set值 缓存优化

    今天技术之家陪你一起了解java开发中遍历一个对象的所有属性并set值 缓存优化: Java反射 1.创建缓存池,可以加快访问速度private static final Map> CACHE  ...

  10. java动态添加属性_java – 动态添加对象的属性

    你好: 在我们的应用程序中,我们从数据库中检索了一些数据,例如,表格中包含以下字符:id,name,age,address,email. 然后我们将根据客户获得一些这些属性. 如果客户端需要id,na ...

最新文章

  1. oracle10.2 迁移,实战:Oracle10.2.0.4异机迁移并升级到Oracle 11.2.0.4
  2. SAP UI5 初学者教程之五:视图控制器初探 试读版
  3. 在非容器(集群)环境下运行dapr
  4. python 精度损失_Python的浮点数损失精度问题
  5. (7)Xilinx PCIE 接口调试总结(学无止境)
  6. Mysql 使用sql语句快速复制表和数据
  7. 想学python买什么书好-学习 Python 用哪本书好?
  8. HTML5期末大作业:商城网站设计——小米商城官网首页(1页) HTML+CSS+JavaScript 学生DW网页设计作业成品 web课程设计网页规划与设计 web学生网页设计作业源码...
  9. 东风谷早苗 简单的水题
  10. 浏览器打开苏宁易购证书错误
  11. [ERROR] [MY-010457][Server]--initialize specified but....
  12. inspect的使用
  13. Android——最佳性能实战
  14. Unity 设置代理 下载资源
  15. html首页我的待办,我的待办.html
  16. 七年级上学期计算机测试题,七年级英语上学期期末测试题及答案
  17. ue4 飞机大战游戏开发日记
  18. 一文读懂MCU的技术原理、区别及发展历史
  19. 来测试下 2019 你一共写了多少行代码?
  20. Python中的GIL问题

热门文章

  1. Hotelling T2检验和多元方差分析
  2. navicat 1146错误
  3. pip install
  4. Linux下如何使用Vi编辑器
  5. itunes备份是整个手机备份吗_如何使用iTunes备份手机资料
  6. Linux清理磁盘空间常用命令
  7. cmor在matlab中,MATLAB小波变换指令及其功能介绍(超级有用)(最新整理)
  8. nnet3-compute计算chain前向传播概率矩阵(声学模型输出)
  9. HTML表格——使用CSS冻结行和列
  10. PyTorch实战 | 文本情感分类任务 | LSTM与LSTM+Attention | TextCNN