23 抽象类 abstract
2024-09-06 17:38:26
/*概念
* abstract:关键字,用于修饰方法和类
* 抽象方法:不同类的方法是相似,但是具体内容又不太一样,所以我们只能抽取他的声明,没有具体的方法体,没有具体方法体的方法就是抽象方法
* 抽象类:有抽象方法的类必须是抽象类
*
* 注意:一个类继承了抽象类需要重写他所有的抽象方法,否则这个类就得是抽象类
*/
* 抽象类的特点:
*抽象方法只能在抽象类里面
* 抽象类和抽象方法必须被abstract修饰
* 抽象类不能创建对象(不能实例化)
* 抽象类中可以有非抽象的方法
* 抽象类和类的关系也是继承
* 一个类继承了抽象类要么重写所有的抽象方法,要么他自己是抽象类
* 抽象类的成员特点:
* 成员变量
* 可以有成员变量
* 可以有常量
* 成员方法
* 可以有抽象方法
* 可以有非抽象方法
* 构造方法
* 可以有构造方法的,需要对抽象类的成员变量进行初始化
*
* final:修饰类、成员变量、成员方法 */
public class AbstractDemo {
public static void main(String[] args) {
//抽象类不能创建对象(不能实例化)
// Animal a = new Animal();
Cat c = new Cat();
c.eat();
}
} abstract class Animal { //方法使用抽象方法后,类需要改为抽象类
//猫吃鱼,狗吃草。都有eat方法,但是吃的东西不一样,这时需要使用抽象方法
abstract public void eat(); // public void eat() {
// System.out.println("吃。。。");
// };
} class Cat extends Animal {
//继承了抽象类后方法和父类不同会报错,方法必须重新
// public void eat(String name) {
// System.out.println("猫吃鱼");
// } @Override
public void eat() {
System.out.println("猫吃鱼");
}
} abstract class Dog extends Animal{
//要么重新方法,要么类需要改为抽象类
public void eat(String name) {
System.out.println("狗吃草");
}
}
输出
package day2_抽象类;
/*
* 抽象类的成员特点:
* 成员变量
* 可以有成员变量
* 可以有常量
* 成员方法
* 可以有抽象方法
* 可以有非抽象方法
* 构造方法
* 可以有构造方法的,需要对抽象类的成员变量进行初始化
*
* final:修饰类、成员变量、成员方法
*/
public class AbstractDmoe2 {
public static void main(String[] args) {
Dog2 d = new Dog2();
d.brking();
d.eat();
}
} abstract class Animal2 {
String name = "哮天犬";
final int num = 10; //final 修饰的变量是固定值,不可改变。
public Animal2() { //抽象类可以有构造方法,因为需要对成员变量初始化。
System.out.println("抽象类的无参构造");
}
public Animal2(String name) {
System.out.println("抽象类有参构造");
}
public abstract void eat();
} class Dog2 extends Animal2 { @Override
public void eat() {
} public void brking() {//叫
System.out.println(name + "," + num);
}
}
输出
思考:能否在brking方法第一行加super或this?
不能,super或this是在构造方法中调用的
最新文章
- ASP.NET MVC Model绑定(五)
- 无需编译、快速生成 Vue 风格的文档网站
- jquery.zclip轻量级复制失效问题
- Python中的条件判断和循环
- thinkphp修改及编写标签库,编辑器的使用
- Eclipse在线集成maven M2eclipse插件
- Unity3D 通用提示窗口实现分析(Inventory Pro学习总结)
- NT内存
- pthread_cond_wait避免线程空转
- Qt中的键盘事件,以及焦点的设置(比较详细)
- C# DES
- 快速记忆JavaScript中exec和match的使用
- 关于as3实现对任何对象进行深刻复制的思考
- Android菜鸟的成长笔记(11)——Android中的事件处理
- Codeforces 242E:XOR on Segment(位上的线段树)
- javascript alert乱码的解决方法
- wamp版本升级小问题记录
- ZOJ 3604 Tunnel Network(凯莱定理)
- kvm虚拟机克隆
- Log4j分级别存储日志到数据库
热门文章
- MySQL数据备份及还原(一)
- 0402数据放入集合进行查询-Java(新手)
- DVWA Brute Force 解析
- 安装SQL Server 2008R2 报错“此计算机上安装了 Microsoft Visual Studio 2008 的早期版本”解决方法
- 简单BBS项目开始(一)
- Android应用开发基本流程
- 2017-12-08高级.net 面试小结
- RDD的Cache、Persist、Checkpoint的区别和StorageLevel存储级别划分
- 解决使用requests_html模块,req.html.render()下载chromium速度慢问题
- 使用Keras进行深度学习:(六)LSTM和双向LSTM讲解及实践