Java基础---认识抽象类
抽象类
abstract:抽象的 , 可以修饰类和方法
可以定义抽象方法的类,就是抽象类
格式:abstract class 类名 {public abstract 返回值类型 方法名();}
抽象方法:只有方法的声明部分,没有方法的实现部分说明:对于父类中定义的非私有的方法,子类有不同的实现的时候,在父类类型中不需要对方法进行实现,只需要声明出 来,将来子类继承之后,重写父类中的方法,不同的子类有不同的实现。
抽象类的特点
1.抽象方法所在的类,一定是抽象类;但是抽象类中未必就有抽象方法,可以有非抽象方法。
2.抽象类不能创建对象,但是可以声明引用(是有构造方法的),抽象类的对象其实是存在的,只是不能通过new关键字手动创建对象,而是在创建子类对象的时候,由jvm自动调用抽象类的构造方法创建对象。
3.一个类是否有构造方法,不取决于该类是否能够创建对象,而是取决于该类是否有成员变量,如果可以定义成员变量,就要初始化成员变量,构造方法就是对成员变量进行赋值的。
4.一个类继承了抽象类后,子类可以全部重写父类的抽象方法,这时候子类就是一个普通类,也可以不全部重写,那么子类也是一个抽象类。
案例、图形面积和周长的计算
public class Demo2 {}
//图形类(抽象类)
abstract class Shape{public abstract double area() ;//计算面积的方法的实现 是根据不同的图形(是图形类的子类对象) 有不同的实现//计算周长的方法的声明,没有具体的实现public abstract double girth() ;//抽象类中可以有非抽象方法 public void name(){System.out.pringtln("我是一个图形类");}
}//圆形类
class Circle extends Shape{//属性private double r;public Circle() {super();}public Circle(double r) {super();this.r = r;}public double getR() {return r;}public void setR(double r) {this.r = r;}
//方法全部重写 @Overridepublic double area() {return Math.PI*r*r;}@Overridepublic double girth() {return Math.PI*2*r;} }//长方形类,方法没有全部重写,所以还是抽象类
abstract class Rect extends Shape{private double width;private double length;public Rect() {super();}public Rect(double width, double length) {super();this.width = width;this.length = length;}public double getWidth() {return width;}public void setWidth(double width) {this.width = width;}public double getLength() {return length;}public void setLength(double length) {this.length = length;}
//方法没有全部重写 @Overridepublic double area() {return length*width;}//周长方法没有重写public abstract double girth() ;
}案例2
package com.ujiuye.demos;public class Demo_7 {// 抽象类中的成员特点public static void main(String[] args) {Woman w1 = new Woman("黑寡妇");System.out.println(w1.getName());}
}abstract class Human {// 抽象类中没有抽象变量,可以定义变量和常量private String name = "人类";//变量final int AGE = 200;//常量
// 抽象类中定义上空参构造public Human() {}
// 有参构造public Human(String name) {this.name = name;}public String getName() {return name;}public void setName(String name) {this.name = name;}
}class Woman extends Human {public Woman() { }public Woman(String name) {// 子类可以调用抽象父类中的构造方法,完成对成员变量的赋值super(name);}
}
Java基础---认识抽象类相关推荐
- 初学Java基础学习——抽象类和接口的区别
初学Java基础学习--抽象类和接口的区别 一.关键字 1)抽象类的关键字 abstract class A{//定义一个抽象类: } class Test extends A{//子类使用exten ...
- java基础之抽象类和接口
一.抽象: **抽象类(abstract class):**使用了abstract关键字所修饰的类叫做抽象类.抽象类无法实例化,也就是说,不能new出来一个抽象类的对象(实例). **抽象方法(abs ...
- Java基础之抽象类
/* 1.抽象类的概述: 动物不应该定义为具体的东西,而且动物中的吃,睡等也不应该是具体的. 我们把一个不是具体的功能称为抽象的功能,而一个类中如果有抽象的功能,该类必须是抽象类. 抽象类的特点:A: ...
- 3、java基础:抽象类与接口的区别
抽象类 我们都知道在面向对象的领域一切都是对象,同时所有的对象都是通过类来描述的,但是并不是所有的类都是来描述对象的.如果一个类没有足够的信息来描述一个具体的对象,而需要其他具体的类来支撑它,那么这样 ...
- java基础-类-抽象类-接口(自学笔记)
一.类 class 定义:具有相同属性(特性)和方法(行为)的一类事物 的抽象的总称 例如:人类,动物,车,屌丝类.是一种类别,世界上所有的事物都可以分类,在计算机中java都能进行对应和体现 类的三 ...
- Java基础概念 | 抽象类与接口
抽象类与接口 定义 用法 定义 抽象类:包含抽象方法的类. 包含抽象方法的类必须通过abstract关键字声明为抽象类,否则编译器会报错. 抽象方法需要通过abstract关键字进行声明. 抽象类可以 ...
- Java基础篇------抽象类详解
- 第一阶段>>>Java基础进阶 OOP/Reflect/注解/IO流/API核心
目录 >>>java基础01-结构以及类型 >>>java基础02-初识数组 >>>java基础03-面向对象OOP >>>ja ...
- 菜鸟学习笔记:Java基础篇5(抽象类与接口、回调函数、内部类)
菜鸟学习笔记:Java面向对象篇下 抽象类 接口 回调函数 内部类 成员内部类 匿名内部类 抽象类 通过前面知识的学习,抽象类这个概念应该不难理解,但比较容易和后面要说的接口混淆,而且在面试中也比较爱 ...
最新文章
- 39条常见的Linux系统简单面试题
- linux c++ 警告 warning: ISO C++ forbids converting a string constant to ‘char*‘ [-Wwrite-strings] 解决方法
- 台哥原创:java 扫雷源码
- Spring Security——获取当前已登录用户UserDetails对象
- 博士论文:教你如何给女朋友送礼物
- JAVA类定义,成员类,抽象类及接口类
- 简易计算机系统综合设计设计报告(VHDL)
- 编程必会的100个代码大全,建议收藏
- MyBatis使用Map
- 计算机开机最快,电脑开机速度,最快几秒?
- LeetCode-初级算法-有效的数独 ( java )
- 【依葫芦画瓢】SSM-CRUD --- 2
- 正常卸载Microsoft Office后无法重新安装?
- 查看docker里应用的版本
- 如何在阿里云提交工单
- 浅谈df和du的区别
- Zookeeper启动失败,提示:Starting zookeeper ... already running as process
- 计算机大三了只会python可以去名企实习吗?如何找python实习
- 鸿蒙开源kernel学习记录(一)
- 语种切换_多语种跳转研究试运行全程直播:莫使金樽空对月
热门文章
- python模块import具体用法
- Hibernate异常之关键字错误
- salesforce 零基础学习(五十一)使用 Salesforce.com SOAP API 实现用户登录以及简单的增删改查(JAVA访问salesforce)...
- NSOperation队列实实现多线程
- 复数类--重载运算符3+
- 用AutoML找到更小、更快、更好的模型,谷歌开源Model Search
- 硬核知识,C/C++移植法则分享
- linux逻辑分区被删除了怎么办,找到了linux分区顺序错乱修复方法
- 深度学习在计算机视觉点云中的发展与未来
- 如何搭建一套完整的深度学习系统?