简单谈一下抽象的概念和一些自己的理解
抽象:(abstract) 某些功能不需要自己实现,而是交给子类实现,那么就可以设计这个方法为抽象方法
- 抽象方法: 没有方法体,用abstract修饰
- 抽象方法必须定义在抽象类中
- 抽象类 : 在类标识前用abstract修饰
- 抽象类中可以有正常方法,和抽象方法,且不是必须有抽象方法.(啥都行) //构造方法: 创建对象
public Animal() {
}
//抽象方法
public abstract void move() ;//删除大括号(方法体),填上分号和abstract.
//正常方法
public void test(){
} - 抽象类中可以有构造方法,但是不能创建对象 有什么意义? (!!! 抽象类的意义是让子类来继承)
- 抽象类的意义是让子类来继承(!!! 抽象方法的目的是被重写,抽象方法必须重写,正常方法可选)
- 属性不能用abstract修饰://abstract int aaa;//属性不能用abstract修饰
- abstract不能与final连用(final关键字修饰类使得类不能被继承(方法不能被重写),与abstract目的冲突)
- 抽象类是类(只不过比较抽象,没有方法体,没法实现)
子类(Dog): 子类继承抽象类
- 子类继承抽象类,就必须实现其所有的抽象方法(重写方法:(子类继承父类大多需重写)先extends继承父类, 再输入方法(move),alt+/,选取Override,可以在方法内写内容)
- 子类继承抽象类,不实现或者没有全部实现抽象方法,那么该子类必须声明为抽象类
- 抽象类可以继承抽象类 (Dog继承Animal)
注: 顶层类是最基础的功能,只是定义这个方法的样子,越被继承,其子类功能也越来越强大
测试abstract:
public class test_abstract {
public static void main(String[] args) {
//不能创建抽象类对象
// Animal a = new Animal;(报错:Cannot instantiate the type Animal:无法实例化类型Animal)
//多态
Animal a = new Cat();
a.move();
注解: Animal类修饰一个变量a,a属于Animal类型, a被它的子类Cat赋值.
a.move();//编译看父类,运行看子类
编译看父类,若父类没有这个方法也会报错,运行看子类
}
//Animal类无法创建对象,但是可以通过子类来创建对象,是子类的对象,用Animal类修饰
public static void test(Animal a) {
}
}
本人很菜,如有错误敬请指出。大家多多交流,大神们多多指点。祝大家生活愉快。