java学习中,抽象类的使用(java 学习中的小记录)
java学习中,抽象类的使用(java 学习中的小记录)作者:王可利(Star·星星)
抽象类(abstract 修饰):
一个类如果被abstract修饰,那么这个类就叫抽象类。
子类继承父类,但是父类里面的方法,子类可以重写,但是重写的话,父类的方法跟子类的方法又不搭配,就产生了矛盾。
如:一个动物类:有一个用腿跑的方法。有一个鱼的类继承动物类,但是鱼不会用腿跑,所以不用重写父类的方法,就产生了矛盾。
所以需要一个方法强制子类重写父类中的某一个方法,就用到了abstract关键词修饰。
abstract 关键字的使用注意事项:
1.如果 abstract 修饰方法,那么这个方法就叫抽象方法。
2.抽象方法是没有主题的,是没有方法的具体实现(没有大括号)。如:abstract public void run();
3.如果一个方法没有主体(主体也叫方法体,也叫函数块、函数体 )(没有大括号),必须要用 abstract 来修饰。
4.如果一个类中有抽象方法,那么这个类就必须使用 abstract 来修饰。
5.一个非抽象类如果继承了一个抽象类,必须实现抽象类父类中的所有方法,重写里面的方法。
6.一个抽象类中是可以有非抽象的方法的,也可以存在构造方法的。构造方法的作用可以让子类能够初始化父类中的变量。
7.抽象类是不能创建对象的。原因:抽象类如果创建了对象的话,对象调用抽象方法的话是没有意义的,抽象方法是没有主体的。
8.抽象类中是可以不出现抽象方法的。
9.abstract 不能和那些关键字连用:
1.private(私有的是不能重写的,但是抽象类是必须要重写的就矛盾了)
2.static(静态修饰 可以直接类访问了,抽象类是针对对象的,所以不能)
3.final (定义了就不能改了,抽象类是必须重写的,又不能改的话就矛盾了)
abstract 关键字的使用场景:
我们在描一个事物的时候吗,发现这个事物确实存在某种行为,但是这种行为又不具体,那么这个时候就可以抽取这种行为声明一个没有实现的行为方式。那么这种行为我们就叫做为抽象行为。就需要用到抽象类了。
1 package study; 2 3 abstract class Animal{ 4 String name; 5 String color; 6 7 abstract public void run() ; 8 } 9 class Dog extends Animal{ 10 public void run(){ 11 System.out.println(name+"跑得很快"); 12 } 13 } 14 class Fish extends Animal{ 15 //需要重写方法(没有强制重写,因为鱼不能跑,没退腿) 16 //应该需要重写,但是可以不重写,这样容易出问题 17 //想一个方法强制子类重写父类中的某一个方法 18 public void run(){ 19 System.out.println(name+"游得很快"); 20 } 21 } 22 23 public class star { 24 public static void main(String[] args) { 25 Dog d = new Dog(); 26 d.name = "猎狗"; 27 Fish fish = new Fish(); 28 fish.name = "星星鱼"; 29 30 d.run();//猎狗跑得很快 31 fish.run();//星星鱼游得很快 32 } 33 }