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 ;
}
}; |
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 Demo02{
public static void main(String args[]){
Student stu = new Student() ;
stu.setName("張三") ;
stu.setAge(30) ;
System.out.println("姓名:"+stu.getName()+",年齡:"+stu.getAge()) ;
}
}; |
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 Demo03{
public static void main(String args[]){
Student stu = new Student() ;
stu.setName("張三") ;
stu.setAge(30) ;
// 此爲子類自己的方法
stu.setSchool("北京大學") ;
System.out.println("姓名:"+stu.getName()+",年齡:"+stu.getAge()+",學校:"+stu.getSchool()) ;
}
}; |
class Person{
private String name ;
private int age ;
public Person(){
System.out.println("**************************") ;
}
public Person(String name,int age){
this.name = name ;
this.age = 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 ;
}
public String getInfo(){
return "姓名:"+this.name+",年齡:"+this.age ;
}
};
class Student extends Person{
// 如果什麼都不定義的話,至少包含四個方法
private String school ;
public Student(){
System.out.println("---------------------------") ;
}
public void setSchool(String school){
this.school = school ;
}
public String getSchool(){
return this.school ;
}
};
public class Demo05{
public static void main(String args[]){
new Student() ;
}
}; |
public Student(){
// 此處實際上默認隱含了一個super(),表示調用父類中的無參構造方法
super() ;
System.out.println("---------------------------") ;
} |
class Person{
private String name ;
private int age ;
public Person(){
System.out.println("**************************") ;
}
public Person(String name,int age){
this.name = name ;
this.age = 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 ;
}
public String getInfo(){
return "姓名:"+this.name+",年齡:"+this.age ;
}
};
class Student extends Person{
// 如果什麼都不定義的話,至少包含四個方法
private String school ;
public Student(){
// 此處實際上默認隱含了一個super(),表示調用父類中的無參構造方法
super() ;
System.out.println("---------------------------") ;
}
public void setSchool(String school){
this.school = school ;
}
public String getSchool(){
return this.school ;
}
public String getStuInfo(){
return "姓名:"+getName()+",年齡:"+getAge()+",學校:"+this.school ;
}
};
public class Demo06{
public static void main(String args[]){
Student stu = new Student() ;
stu.setName("張三") ;
stu.setAge(30) ;
stu.setSchool("北京大學") ;
System.out.println(stu.getStuInfo()) ;
}
}; |
public String getInfo(){
return "姓名:"+this.name+",年齡:"+this.age ;
} |
public String getStuInfo(){
return "姓名:"+getName()+",年齡:"+getAge()+",學校:"+this.school ;
} |
class A{
public void fun(){
System.out.println("Hello") ;
}
};
class B extends A{
// 此處定義了一個與父類中方法名稱相同的方法
// 所以此時稱爲方法的覆寫
public void fun(){
System.out.println("World!!!") ;
}
};
public class Demo07{
public static void main(String args[]){
B b = new B() ;
b.fun() ;
}
}; |
class Person{
private String name ;
private int age ;
public Person(){
System.out.println("**************************") ;
}
public Person(String name,int age){
this.name = name ;
this.age = 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 ;
}
public String getInfo(){
return "姓名:"+this.name+",年齡:"+this.age ;
}
};
class Student extends Person{
// 如果什麼都不定義的話,至少包含四個方法
private String school ;
public Student(){
// 此處實際上默認隱含了一個super(),表示調用父類中的無參構造方法
super() ;
System.out.println("---------------------------") ;
}
public void setSchool(String school){
this.school = school ;
}
public String getSchool(){
return this.school ;
}
public String getInfo(){
return super.getInfo()+",學校:"+this.school ;
}
};
public class Demo08{
public static void main(String args[]){
Student stu = new Student() ;
stu.setName("張三") ;
stu.setAge(30) ;
stu.setSchool("北京大學") ;
System.out.println(stu.getInfo()) ;
}
}; |
區別點 |
方法的覆寫 |
方法的重載 |
概念上 |
方法名稱相同,參數的類型或個數相同 |
方法名稱相同,參數的類型或個數不同 |
範圍 |
繼承關係之中 |
發生在一個類中 |
特殊要求 |
覆寫的時候被子類覆寫的方法不能用有比父類更嚴格的訪問權限 |
- |
class Demo{
private void fun(){
System.out.println("HELLO") ;
}
public void test(){
fun() ;
}
};
class SDemo extends Demo{
// 實際上此時是在本類中新定義了一個方法
void fun(){
System.out.println("hello") ;
}
};
public class Demo12{
public static void main(String args[]){
SDemo sd = new SDemo() ;
sd.test() ;
}
}; |
class Demo{
public Demo(){
System.out.println("父類中的無參構造。") ;
}
public Demo(String name){
System.out.println("父類中有一個參數的構造。") ;
}
};
class SDemo extends Demo{
public SDemo(){
super() ;
}
public SDemo(String name){
super(name) ;
}
};
public class Demo09{
public static void main(String args[]){
SDemo sd = new SDemo("zhangsan") ;
}
}; |
class Demo{
public Demo(){
System.out.println("父類中的無參構造。") ;
}
public Demo(String name){
System.out.println("父類中有一個參數的構造。") ;
}
public void fun(){
System.out.println("父類中的方法。。。") ;
}
};
class SDemo extends Demo{
public SDemo(){
super() ;
}
public SDemo(String name){
super(name) ;
}
public void fun(){
super.fun() ;
System.out.println("子類中的方法。。。") ;
}
};
public class Demo10{
public static void main(String args[]){
SDemo sd = new SDemo("zhangsan") ;
sd.fun() ;
}
}; |
class Demo{
public String name = "HELLO" ;
};
class SDemo extends Demo{
public String name = "hello" ;
public void fun(){
System.out.println(super.name) ;
System.out.println(name) ;
}
};
public class Demo11{
public static void main(String args[]){
SDemo sd = new SDemo() ;
sd.fun() ;
}
}; |
區別 |
super |
this |
範圍 |
從子類找到父類中的內容 |
直接找到本類中的內容 |
屬性 |
直接找到父類中的指定屬性,不在子類中找 |
如果在本類中找到了屬性,則使用,如果沒有找到,則會從父類中找此屬性 |
方法 |
直接調用父類中的方法 |
如果本類中有就調用,如果沒有就找父類中的方法 |
構造 |
在子類構造方法的首行調用,表示調用父類中的構造。子類中至少有一個構造方法可以調父類構造 |
表示直接調用本類中的其他構造方法,但至少有一個構造方法是沒有this()的,作爲出口 |
特殊 |
- |
this表示當前對象 |