Java面向对象高级--继承的进一步研究
1、子类对象的实例化过程

class Person{ // 定义Person类 private String name ; // 定义name属性 private int age ; // 定义age属性 public Person(){ System.out.println("父类Person中的构造。") ; } 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{ // 定义Student类 private String school ; // 定义school属性 public Student(){ super() ; // 默认隐藏 System.out.println("子类Student中的构造。") ; } public void setSchool(String school){ this.school = school ; } public String getSchool(){ return this.school ; } }; public class InstanceDemo{ public static void main(String arsg[]){ Student stu = new Student() ;// 实例化子类对象 stu.setName("张三") ; // 此方法在Student类中没有明确定义 stu.setAge(30) ; stu.setSchool("清华大学") ; System.out.println("姓名:" + stu.getName() + ",年龄:" + stu.getAge() + ",学校:" + stu.getSchool() ) ; } };
对于子类的构造方法中,隐藏了super的语句,有时也将父类称为超类。
2、方法的覆写


class Person{ // 定义父类 private void print(){ // 默认的访问权限 System.out.println("Person --> void print()。") ; } public void fun(){ // 定义一个fun方法 this.print() ; // 调用print()方法 } }; class Student extends Person{ // 定义继承关系 void print(){ // 覆写父类中的方法 // super.print() ; // 访问父类中被子类覆写过的方法 System.out.println("Student --> void print()。") ; } }; public class OverrideDemo04{ public static void main(String args[]){ Student s = new Student() ; s.fun() ; } };
此时,方法并没有被覆写,而是相当于在子类中又重新定义了一个新的方法。
3、属性的覆盖
class Person{ // 定义父类 public String info = "MLDN" ; // 定义一个公共属性 }; class Student extends Person{ // 定义继承关系 public String info = "LXH" ; // 定义了一个与父类中属性名称一致的属性 void print(){ // 覆写父类中的方法 System.out.println("父类中的属性:" + super.info) ; System.out.println("子类中的属性:" + this.info) ; } }; public class OverrideDemo05{ public static void main(String args[]){ Student s = new Student() ; s.print() ; } };
4、方法的覆写与重载的区别

5、super关键字
super表示从子类中调用父类中的操作:如,调用属性,方法,构造等等。
子类在实例化的时候,默认会调用父类中的无参构造,如果希望调用有参构造,则必须在子类中明确的声明。
class Person{ // 定义Person类 private String name ; // 定义name属性 private int age ; // 定义age属性 public Person(String name,int age){ this.setName(name) ; this.setAge(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.getName() + ";年龄:" + this.getAge() ; } }; class Student extends Person{ // 定义Student类 private String school ; // 定义school属性 public Student(String name,int age,String school){ super(name,age) ; // 明确调用父类中有两个参数的构造 this.school = school ; } public void setSchool(String school){ this.school = school ; } public String getSchool(){ return this.school ; } public String getInfo(){ return super.getInfo() + ";学校:" + this.getSchool() ; } }; public class SuperDemo01{ public static void main(String arsg[]){ Student stu = new Student("张三",30,"清华大学") ;// 实例化子类对象 System.out.println(stu.getInfo()) ; } };

最后更新:2017-04-03 15:21:51