java三大特性之 继承

来源:互联网 发布:java selenim设置超时 编辑:程序博客网 时间:2024/05/25 23:28

1 继承:子类继承父类的特性,只支持单继承,只有一个父类。这样是避免多个父类时的冲突。子类继承了父类的特性,同时扩展功能。

继承的出现:提高了代码的复用性,让类与类之间产生了关系。

子类父类函数的特点:

子类出现和父类一样的函数时,覆盖父类的函数。重写。

父类独有的函数,子类没出现,子类同样保留了父类函数的功能

继承的弊端:打破了封装性

子类实例化过程:

因为子类每一个构造函数内的第一行都有一句隐式super();当父类中没有空参数的构造函数时,子类必须手动通过super语句形式来指定要访问父类中的构造函数。当然,子类的构造函数第一行也可以手动指定this语句来访问本类中的构造函数。子类中至少会有一个构造函数会访问父类中的构造函数。

2 抽象类

抽象方法必须定义在抽象类中,抽象类不可以被实例化,只有所有的抽象方法被实现后才可以实例化。

抽象类的问题:

1,抽象类中有构造函数吗?

     有,用于给子类进行初始化。

2,abstract关键字不可以和那些关键字共存?

private不行,抽象方法需要实现,私有,没办法实现覆盖原有方法。

static不行,静态的不用对象,直接类名调用,抽象方法没内容,没意义。

final不行,水火不容,抽象要被覆盖,但是final不能覆盖。

 3,抽象类和一般类的异同点。

相同点:抽象类和一般类都是用来描述事物的,都在内部定义了成员。

不同点:1,一般类有足够的信息描述事物。抽象类描述事物的信息有可能不足。

2,一般类中不能定义抽象方法,只能定义非抽象方法。抽象类中可定义抽象方法,同时也可以定义非抽象方法。

3,一般类可以被实例化,抽象类不可以被实例化。


abstract class Employee  {   private String name;   private String id;   private double pay;   Employee(String name,String id,double pay){   this.name = name;   this.id = id;   this.pay = pay;   }   public abstract void work();     }   //描述程序员。  class Programmer extends Employee  {   Programmer(String name,String id,double pay)  {   super(name,id,pay);   }   public void work()  {   System.out.println("code...");   }   }  //描述经理。   class Manager extends Employee  {   private int bonus;   Manager(String name,String id,double pay,int bonus)  {   super(name,id,pay);   this.bonus = bonus;   }   public void work()  {   System.out.println("manage");   }   }  class Employee { public static void main(String[] args){ Programmer programmer = new Programmer("黑马程序员——新长城","007",8000);programmer.work();Employee employee = new Employee("黑马程序员总经理","001",13000,2000);employee.work();} } 



0 0