/*概念
  * 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是在构造方法中调用的

最新文章

  1. ASP.NET MVC Model绑定(五)
  2. 无需编译、快速生成 Vue 风格的文档网站
  3. jquery.zclip轻量级复制失效问题
  4. Python中的条件判断和循环
  5. thinkphp修改及编写标签库,编辑器的使用
  6. Eclipse在线集成maven M2eclipse插件
  7. Unity3D 通用提示窗口实现分析(Inventory Pro学习总结)
  8. NT内存
  9. pthread_cond_wait避免线程空转
  10. Qt中的键盘事件,以及焦点的设置(比较详细)
  11. C# DES
  12. 快速记忆JavaScript中exec和match的使用
  13. 关于as3实现对任何对象进行深刻复制的思考
  14. Android菜鸟的成长笔记(11)——Android中的事件处理
  15. Codeforces 242E:XOR on Segment(位上的线段树)
  16. javascript alert乱码的解决方法
  17. wamp版本升级小问题记录
  18. ZOJ 3604 Tunnel Network(凯莱定理)
  19. kvm虚拟机克隆
  20. Log4j分级别存储日志到数据库

热门文章

  1. MySQL数据备份及还原(一)
  2. 0402数据放入集合进行查询-Java(新手)
  3. DVWA Brute Force 解析
  4. 安装SQL Server 2008R2 报错“此计算机上安装了 Microsoft Visual Studio 2008 的早期版本”解决方法
  5. 简单BBS项目开始(一)
  6. Android应用开发基本流程
  7. 2017-12-08高级.net 面试小结
  8. RDD的Cache、Persist、Checkpoint的区别和StorageLevel存储级别划分
  9. 解决使用requests_html模块,req.html.render()下载chromium速度慢问题
  10. 使用Keras进行深度学习:(六)LSTM和双向LSTM讲解及实践