繼承+多型+抽象類
繼承
1. “is-a”關係是繼承的一個明顯特徵
2. java中所有的繼承都是公有繼承,而沒有c++中的私有繼承和保護繼承
3. java不支援多繼承,多繼承功能的實現方式用介面來實現
4. 阻止繼承:final修飾過的類或方法,不可繼承
多型
1. java中,物件變數是多型的。如下:Manager is-a Employee
Employee m = new Manager("brain", 3000); //ok 物件變數是多型的
一個Employee變數既可以引用一個Employee類物件,也可以引用一個Employee類的任何一個子類的物件(Manager),但是這樣做後就不可以再用繼承子類特有的方法,只能看做是超類Employee的物件了
2. 動態繫結
弄清呼叫物件方法的執行過程十分重要,如下圖所示
抽象類
1. 包含一個或多個抽象方法的類本身必須宣告為抽象的;抽象類也可以包含具體資料和具體方法
abstract class Person //抽象類
{
private String name; //具體資料
public Person(String n) //構造器
{
name = n;
}
public abstract String getDescription(); //抽象方法
public String getName() //具體方法
{
return name;
}
}
抽象類的抽象方法具體在子類中實現,在介面中可以看到更多的抽象方法抽象類不能被例項化。可以定義一個抽象類的物件變數,但是隻能引用非抽象子類的物件,如下:
Person p = new Student("Brain", "Economics");
抽象類助理解示例程式:package test;
import java.util.*;
public class Test
{
public static void main(String args[])
{
Person[] people = new Person[2];
people[0] = new Employee("Bob", 10000, 2017, 6, 28);
people[1] = new Student("brain", "Economics");
for(Person p: people)
{
System.out.println(p.getName() + ", " + p.getDescription());
}
}
}
abstract class Person
{
private String name;
public Person(String n)
{
name = n;
}
public abstract String getDescription();
public String getName()
{
return name;
}
}
class Student extends Person
{
private String major;
public Student(String n, String m)
{
super(n);
major = m;
}
public String getDescription()
{
return "a student majoring in" + major;
}
}
class Employee extends Person
{
private double salary;
private Date hireDay;
public Employee(String n, double s, int year, int month, int day)
{
super(n);
GregorianCalendar cal = new GregorianCalendar(year, month-1, day);
hireDay = cal.getTime();
}
public String getDescription()
{
return String.format("an employee with a salary of $%.2f", salary);
}
public void raiseSalary(double percent)
{
salary *= (1 + percent/100);
}
}
output:Bob, an employee with a salary of $0.00
brain, a student majoring inEconomics
相關文章
- PHP 抽象類繼承抽象類時的注意點PHP 抽象類繼承抽象類時的注意點PHP抽象繼承
- TypeScript(5)類、繼承、多型TypeScript繼承多型
- Java抽象類、繼承及多型和介面卡的實現Java抽象繼承多型
- PHP 抽象類繼承抽象類時的注意點PHP抽象繼承
- Java之繼承和抽象類Java繼承抽象
- JAVA介面繼承、抽象類等Java繼承抽象
- 繼承 重寫和抽象類繼承抽象
- scala_繼承、型別判斷、抽象類、匿名內部類繼承型別抽象
- c# abstract抽象類及抽象方法_繼承C#抽象繼承
- Java中的類繼承與多型Java繼承多型
- 繼承與多型繼承多型
- 繼承和多型繼承多型
- 多型和繼承多型繼承
- C# OOP:繼承,介面和抽象類C#OOP繼承抽象
- 淺析 Python 的類、繼承和多型Python繼承多型
- java繼承與多型Java繼承多型
- 多型和抽象類多型抽象
- java 的 四 個 基 本 特 性 ——封裝 繼承 多型 抽象Java封裝繼承多型抽象
- 6-2 抽象類的繼承 (5分)抽象繼承
- 介面是否可繼承(extends)介面? 抽象類是否可實現 (implements)介面? 抽象類是否可繼承具體類(concrete class)?繼承抽象
- JavaScript 的繼承與多型JavaScript繼承多型
- Python 繼承 和 多型Python繼承多型
- OOP的多型和繼承OOP多型繼承
- Javascript的繼承與多型JavaScript繼承多型
- 封裝、繼承和多型封裝繼承多型
- Java基礎10 介面的繼承與抽象類Java繼承抽象
- 類的繼承_子類繼承父類繼承
- 詳細介紹Python類的繼承與多型Python繼承多型
- c++菱形繼承、多型與類記憶體模型C++繼承多型記憶體模型
- 【Java】繼承、抽象、組合Java繼承抽象
- 繼承、抽象個人小結繼承抽象
- java抽象繼承-模板方法Java抽象繼承
- Java 繼承與多型實驗Java繼承多型
- C中的繼承和多型繼承多型
- JAVA類的頂層Type抽象和繼承關係Java抽象繼承
- 多繼承 與 多重繼承繼承
- java多型抽象類例項Java多型抽象
- 物件導向 -- 三大特性之繼承 補充 抽象類 介面類物件繼承抽象