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();


} 

}