java的繼承
1. java中繼承的關鍵字是extends, 其實現的形式是:
class Child extends Father{ }
繼承的主要作用就是對類進行擴充以及代碼的複用。
繼承的簡單例子:
public class Person {
private String name;
private int age;
public void setName(String name)
{
this.name = name;
}
public String getName()
{
return name;
}
public void setAge(int age)
{
this.age = age;
}
public int getAge()
{
return age;
}
}
public class Student extends Person{
}
public class TestMain {
public static void main(String[] args)
{
Student stu = new Student();
stu.setName("kaikai");
stu.setAge(18);
System.out.println(stu.getName() + ": " + stu.getAge());
}
}
根據上面的代碼我們可以發現子類可以直接繼承父類的方法和屬性,實現代碼的複用。子類最低也可以維持和父類相同的功能,。當然子類也可以對屬性和方法進行擴充。如下:
public class Student extends Person{
private String ID; //擴充了新的屬性
public void setId(String ID)
{
this.ID = ID;
}
public String getId()
{
return ID;
}
}
public class TestMain {
public static void main(String[] args)
{
Student stu = new Student();
stu.setName("kaikai");
stu.setAge(23);
stu.setId("201505050418");
System.out.println("姓名:" + stu.getName() + "\n年齡:" + stu.getAge() + "\n學號:" + stu.getId());
}
}
2. 繼承的規( 限 )範( 制 )
- 子類在實例化對象時會首先實例化父類對象。也就是首先調用父類的構造方法再調用子類的構造方法去初始化。
public class Person {
public Person()
{
System.out.println("調用父類的構造方法");
}
}
public class Student extends Person
{
public Student()
{
super(); //在無參數的時候,super()寫不寫效果一樣
System.out.println("調用子類的構造方法");
}
}
public MainTest
{
public static void main(String[] args)
{
Student stu = new Student();
}
}
執行結果:
調用父類的構造方法
調用子類的構造方法
- java只允許單繼承不允許多重繼承, 但是允許多層繼承,建議不超過三層。
class A{}
class B{}
class C extends A, B{}
上面的繼承當然是錯誤的。那麼問題來了,要是想讓C既有A的屬性,又有B的屬性怎麼辦呢?
那就只能讓C當孫子了。_
class A{}
class B extends A{}
class C extends B{}
- 繼承的時候我們需要注意的是, 子類會繼承父類所有的屬性(包括私有屬性、構造方法、普通方法), 所有的非私有屬性子類都可以直接調用,所有私有的屬性,子類需要藉助其它方法調用。
如下,顯式繼承和隱式繼承。
public class Person {
public String name = "kaikai";
private int age = 21;
public void setAge(int age)
{
this.age = age;
}
public int getAge()
{
return age;
}
}
public class Student extends Person{
}
public class TestMain {
public static void main(String[] args) {
Student stu = new Student();
stu.setAge(22);
System.out.println("Student Name:" + stu.name); //顯式繼承,可以直接調用
System.out.println("Student Age:" + stu.getAge()); //隱式繼承, 需要調用別的方法訪問
}
}
繼承總結:
- 繼承的語法以及繼承的目的(擴展已有類的功能,使代碼重用)
- 子類對象的實例化流程:不管如何操作,一定要先實例化父類對象。
- 不允許多重繼承,只允許多層繼承。