
繼承的基本概念:
1.1--繼承的基本概念:
先看一下兩個(gè)類
Person類和Student類
class Person
{
private String name;
private int age;
public void setName(String name){
this.name=name;
}
public void setAge(int age){
this.age=age;
}
public String getName(){
return this.name;
}
public int getAge(){
return this.age;
}
};
class Student
{
private String name;
private int age;
private string school;
public void setName(String name){
this.name=name;
}
public void setAge(int age){
this.age=age;
}
public void setSchool(String school){
this.school=school;
}
public String getName(){
return this.name;
}
public int getAge(){
return this.age;
}
public String getSchool(){
return this.school;
}
};
類定義好了,但是這樣是否合理呢》
兩個(gè)類的部分代碼是重復(fù)的。
但是從實(shí)際的角度看,這種實(shí)現(xiàn)肯定不好。
這就要使用繼承的概念,
class Person
{
private String name;
private int age;
public void setName(String name){
this.name=name;
}
public void setAge(int age){
this.age=age;
}
public String getName(){
return this.name;
}
public int getAge(){
return this.age;
}
};
class Student extends Person
{
//此處不添加任何代碼
};
public class ExDemo01
{
public static void main(String args[]){
Student stu = new Student();
stu.setName("張三");
stu.setAge(18);
System.out.println("姓名:"+stu.getName()+"年齡:"+stu.getAge());
}
}
F:\java>java ExDemo01
姓名:張三,年齡:18
可以把父類的內(nèi)容拿過來在子類中繼續(xù)使用,這樣,子類如果有一些重復(fù)的方法,將就不用重復(fù)定義了。
繼承:子類繼承父類,擴(kuò)展已有類的功能。
1.2 extends關(guān)鍵字:成為擴(kuò)展,子類也稱為派生類。
class Person
{
private String name;
private int age;
public void setName(String name){
this.name=name;
}
public void setAge(int age){
this.age=age;
}
public String getName(){
return this.name;
}
public int getAge(){
return this.age;
}
};
class Student extends Person
{
//此處添加代碼
private String school;
public void setSchool(String school){
this.school=school;
}
public String getSchool(){
return this.school;
}
};
public class ExDemo01
{
public static void main(String args[]){
Student stu = new Student();
stu.setName("張三");
stu.setAge(18);
stu.setSchool("清華大學(xué)");
System.out.println("姓名:"+stu.getName()+",年齡:"+stu.getAge()+",學(xué)校:"+stu.getSchool());
}
}
結(jié)果為:
F:\java>java ExDemo01
姓名:張三,年齡:18,學(xué)校:清華大學(xué)
F:\java>
1.3 繼承的限制
在java中只允許單繼承,不允許多繼承。即一個(gè)子類只能繼承一個(gè)父類,
class A{
};
class B
{
};
class C extends A,B
{
};
結(jié)果為:
F:\java>javac ExDemo02.java
ExDemo02.java:7: 需要 '{'
class C extends A,B{
^
1 錯(cuò)誤
但是允許多層繼承,即一個(gè)子類可以有一個(gè)父類,一個(gè)父類還可以有一個(gè)父類。
class A{
};
class B extends A{
};
class C extends B{
};
1.4:訪問限制
子類是不能直接訪問父類的私有成員的,但是子類可以調(diào)用父類的非私有方法,但是不能直接調(diào)用父類中的私有成員。
class Person
{
private String name;
private int age;
public void setName(String name){
this.name=name;
}
public void setAge(int age){
this.age=age;
}
public String getName(){
return this.name;
}
public int getAge(){
return this.age;
}
};
class Student extends Person
{
//此處添加代碼
public void fun(){
System.out.println(name);//錯(cuò)誤
}
};
public class ExDemo02
{
public static void main(String args[]){
Student stu = new Student();
stu.setName("張三");
stu.fun();
}
}
F:\java>javac ExDemo01.java
ExDemo01.java:26: 類 ExDemo02 是公共的,應(yīng)在名為 ExDemo02.java 的文件中聲明
public class ExDemo02
^
ExDemo01.java:22: name 可以在 Person 中訪問 private
System.out.println(name);//錯(cuò)誤
^
2 錯(cuò)誤
修改后的代碼:
class Person
{
private String name;
private int age;
public void setName(String name){
this.name=name;
}
public void setAge(int age){
this.age=age;
}
public String getName(){
return this.name;
}
public int getAge(){
return this.age;
}
};
class Student extends Person
{
//此處添加代碼
public void fun(){
System.out.println(getName());//錯(cuò)誤
}
};
public class ExDemo01
{
public static void main(String args[]){
Student stu = new Student();
stu.setName("張三");
stu.fun();
}
}
結(jié)果為:
F:\java>javac ExDemo01.java
F:\java>
F:\java>java ExDemo01
張三
F:\java>
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
