黑马程序员――抽象类

时间:2023-02-18 20:15:22

---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IO开发S</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------

3.9抽象类

   1、特点:⑴、方法只有声明没有实现时,该方法就是抽象方法,需要被abstract修饰,抽象方法必须被定义在抽象类中,该类也得被abstract修饰。

⑵、抽象类不可以实例化,因为调用方法没有意义。

⑶、抽象类必须有其子类覆盖了所有的抽象方法后,该子类才可以实例化,否则该类还是抽象类。

2、问题细节:⑴、抽象类中有构造函数,用于给子类对象进行初始化

⑵、抽象类中也有非抽象方法,目的就是不让该类创建对象

3、抽象类不可以与那些关键字共存?

   ⑴、private:如果私有了,就不可以被子类覆盖了

 ⑵、static:

 ⑶、final:final是最终的,被他修饰的不可以覆盖。

4、抽象类与一般类的异同点:

   ⑴、相同:他们都是用来描述事物的,都在内部定义成员

 ⑵、不同:①、一般类有足够的信息描述事物,而抽象类信息不足

  ②、抽象类可定义抽象方法和非抽象方法,而一般类只能定义非抽象方法

  ③、抽象类不可以实例化,而一般类可以。

    5、抽象类一定是父类,因为需要子类覆盖其所有的抽象方法后,才能对子类实例化。

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 Manager extends Employee{
private int bonus;
Manager(String name, String id, double pay, int bonus) {
super(name,id,pay);
this.bonus = bonus;
}
@Override
public void work() {
System.out.println("Manager work");
}
}
class Pro extends Employee{
Pro(String name, String id, double pay) {
super(name,id,pay);
}
@Override
public void work() {
System.out.println("Pro work");
}
}
public class AboutAbstract {
public static void main(String[] args) {
Manager man = new Manager("hufei", "4556", 11110, 256);
man.work();
}
}

---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ---------------------- 

详细请查看:<ahref="http://edu.csdn.net" target="blank">http://edu.csdn.net</a>

 

本文出自 “狼王” 博客,请务必保留此出处http://19901111.blog.51cto.com/6838239/1220302