Java基础(面向对象二)

抽象类:

  有时候由于子类必然覆写父类中的某些方法,所以父类中方法体的定义略显多余。

  而如果去掉父类的方法体,会导致编译错误。

  如果整个去掉父类的方法又使子类失去了多态的特性(继承自同一父类的子类在调用同一方法时执行不同的逻辑)。

  因此可用abstract用来修饰父类及父类中的方法,此时方法不能写方法体,只用来让子类继承并覆写。

  子类必须覆写父类中的abstract方法。

  抽象类的其余使用方法皆同普通类(构造方法)。

  抽象类可继承抽象类,然后继续添加抽象方法。

 1 public class Demo {
 2     public static void main(String[] args) {
 3         Person[] arr = {
 4                 new Worker("worker"),
 5                 new Student("student"),
 6 //                new Person()
 7                 new Student1("student1")
 8         };
 9         for(Person i:arr){
10             i.run();
11         }
12     }
13 }
14 
15 //定义第一抽象类
16 abstract class Person {
17     protected String name;
18     public Person(String name){
19         this.name = name;
20     }
21     public abstract void run();
22 }
23 //继承自第一抽象类的子类
24 public class Student extends Person {
25     public Student(String name){
26         super(name);
27     }
28     @Override
29     public void run(){
30         System.out.println(this.name+".run");
31     }
32 }
33 //继承自第一抽象类的子类
34 public class Worker extends Person {
35     public Worker(String name){
36         super(name);
37     }
38     @Override
39     public void run(){
40         System.out.println(this.name+".run");
41     }
42 }
43 //继承自第一抽象类的抽象类
44 abstract class Person1 extends Person {
45     public Person1(String name){
46         super(name);
47     }
48     abstract void study();
49 
50 }
51 //继承自第二抽象类的子类
52 public class Student1 extends Person1 {
53     public Student1(String name){
54         super(name);
55     }
56     public void run(){
57         System.out.println("Student1.run");
58     }
59     public void study(){
60         System.out.println("Student1.study");
61     }
62 }

 

posted on 2019-07-26 09:29  南华  阅读(107)  评论(0编辑  收藏  举报