Java面向对象高级--继承的进一步研究

来源:互联网 发布:人工智能和人类抢饭碗 编辑:程序博客网 时间:2024/06/06 14:19

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()) ;}};