抽象类
2016-02-03 19:29
267 查看
抽象类的概述
动物不应该定义为具体的东西,而且动物中的吃,睡等也不应该是具体的。 我们把一个不是具体的功能称为抽象的功能,而一个类中如果有抽象的功能,该类必须是抽象类。
抽象类的特点
A:抽象类和抽象方法必须用abstract关键字修饰 B:抽象类中不一定有抽象方法,但是有抽象方法的类必须定义为抽象类 C:抽象类不能实例化 因为它不是具体的。 抽象类有构造方法,但是不能实例化?构造方法的作用是什么呢? 用于子类访问父类数据的初始化 D:抽象的子类 a:如果不想重写抽象方法,该子类是一个抽象类。 b:重写所有的抽象方法,这个时候子类是一个具体的类。 抽象类的实例化其实是靠具体的子类实现的。是多态的方式。 Animal a = new Cat();
//abstract class Animal //抽象类的声明格式 abstract class Animal { //抽象方法 //public abstract void eat(){} //空方法体,这个会报错。抽象方法不能有主体 public abstract void eat(); public Animal(){} } //子类是抽象类 abstract class Dog extends Animal {} //子类是具体类,重写抽象方法 class Cat extends Animal { public void eat() { System.out.println("猫吃鱼"); } } class AbstractDemo { public static void main(String[] args) { //创建对象 //Animal是抽象的; 无法实例化 //Animal a = new Animal(); //通过多态的方式 Animal a = new Cat(); a.eat(); } }
抽象类的成员特点
成员变量:既可以是变量,也可以是常量。 构造方法:有。 用于子类访问父类数据的初始化。 成员方法:既可以是抽象的,也可以是非抽象的。 抽象类的成员方法特性: A:抽象方法 强制要求子类做的事情。 B:非抽象方法 子类继承的事情,提高代码复用性。
abstract class Animal { public int num = 10; public final int num2 = 20; public Animal() {} public Animal(String name,int age){} public abstract void show(); public void method() { System.out.println("method"); } } class Dog extends Animal { public void show() { System.out.println("show Dog"); } } class AbstractDemo2 { public static void main(String[] args) { //创建对象 Animal a = new Dog(); a.num = 100; System.out.println(a.num); //a.num2 = 200; System.out.println(a.num2); System.out.println("--------------"); a.show(); a.method(); } }
需要注意的几个问题
A: 一个类如果没有抽象方法,可不可以定义为抽象类?如果可以,有什么意义? A:可以。 B:不让创建对象。 B: abstract不能和哪些关键字共存? private 冲突 final 冲突 static 无意义
abstract class Fu { //public abstract void show(); //非法的修饰符组合: abstract和private //private abstract void show(); //非法的修饰符组合 //final abstract void show(); //非法的修饰符组合 static abstract void show(); public static void method() { System.out.println("method"); } } class Zi extends Fu { public void show() {} } class AbstractDemo3 { public static void main(String[] args) { Fu.method(); } }
相关文章推荐
- ndk-build生成.so
- Window平台搭建Redis分布式缓存集群 (一)server搭建及性能測试
- join()和split()方法
- 逆波兰表达式
- Android基本架构
- GCC 编译详解
- php的循环与引用的一个坑
- 测试复合索引在oracle、sql server 、mysql各种情况下是否使用索引
- JAVAH生成JNI头文件
- Zookeeper核心机制
- Android中System.currentTimeMillis()
- 算法练习——李白打酒
- 第十二天
- Wireshark抓包
- 一周复习总结(一)第二周
- 为没有web选项的eclipse添加web and JavaEE插件
- android 改变全局字体样式(第三方字体包)
- HDU1102并查集和最小生成树
- POJ 3641 -- 快速幂运算,素数判定
- 137 php 正则表达式2-反向引用