本文共 3164 字,大约阅读时间需要 10 分钟。
在Java中,继承允许一个子类继承父类的成员变量,并可以在此基础上进行修改或扩展。在本次练习中,我们将学习如何在继承关系中使用成员变量。
package cn.oop2;public class TestExtends { public static void main(String[] args) { final Son son = new Son(); son.eat(); }}class Father { int count = 0; int sum = 200;}class Son extends Father { int sum = 100; public void eat() { int sum = 10; System.out.println(sum); // 输出10,遵循就近原则,打印局部变量 System.out.println(this.sum); // 输出100,使用this调用本类成员变量 System.out.println(super.sum); // 输出200,使用super调用父类成员变量 System.out.println(count); // 输出0,super调用父类成员变量 }} Father中定义了两个成员变量count和sum,分别初始化为0和200。Son中定义了一个名为sum的成员变量,初始化为100。由于sum在子类中被重新定义了,因此需要使用this.sum来访问子类的sum成员变量。eat()中定义了一个局部变量sum,其值为10。根据就近原则,局部变量会覆盖本类成员变量sum,因此需要使用this.sum来访问本类的sum成员变量。eat()方法中,使用super.sum可以访问父类的sum成员变量,输出200。super关键字用于调用父类的构造方法或成员变量。在Java中,继承允许子类继承父类的成员方法,并可以对方法进行重写(override)。成员方法的使用是OOP中非常重要的概念,允许我们在不修改原有代码的情况下对方法的功能进行修改和扩展。
package cn.oop2;public class Test2Extends2 { public static void main(String[] args) { final Son2 son2 = new Son2(); Father2 son3 = new Son2(); son2.play(); // 儿子喜欢打篮球 son2.study(); // 儿子喜欢打篮球 son3.play(); // 父亲喜欢打羽毛球 }}class Father2 { public void play() { System.out.println("父亲喜欢打羽毛球"); }}class Son2 extends Father2 { public void play() { System.out.println("儿子喜欢打篮球"); } public void study() { System.out.println("儿子学习搬砖"); }} Father2中定义了一个方法play(),输出“父亲喜欢打羽毛球”。Son2中对play()方法进行了重写,输出“儿子喜欢打篮球”。子类可以通过调用super.play()来调用父类的play()方法。Test2Extends2中创建了两个对象,一个是Son2,另一个是Father2。通过调用play()方法,可以分别输出“儿子喜欢打篮球”和“父亲喜欢打羽毛球”。构造方法(constructor)是Java中用于创建对象的关键机制。在继承关系中,构造方法的使用允许子类在创建对象时对父类的构造进行扩展。
package cn.oop2;public class Test3Extends3 { public static void main(String[] args) { final Person person = new Person(); final Person person2 = new Person("海绵宝宝"); final Person person3 = new Person("花木兰", 18, "中国古代"); System.out.println(person2.name); // 海绵宝宝 System.out.println(person3.address); // 中国古代 person.eat(); // 干饭时间到! person2.eat(); // 干饭时间到! person3.eat(); // 干饭时间到! }}class Person { String name; int age; String address; public Person() { System.out.println("我是Person类的无参数构造"); } public Person(String s) { name = s; System.out.println("我是Person类的1个参数构造"); } public Person(String name, int age, String address) { super(); this.name = name; this.age = age; this.address = address; System.out.println("我是Person类的全参构造"); } public void eat() { System.out.println("干饭时间到!"); }} Person类中定义了一个无参数构造,执行时会输出“我是Person类的无参数构造”。String参数的构造,执行时会输出“我是Person类的1个参数构造”,并将参数赋值给name成员变量。String name, int age, String address),执行时会输出“我是Person类的全参构造”,并将参数赋值给相应的成员变量。此外,通过调用super()可以调用父类的无参数构造。eat()方法中,输出了“干饭时间到!”,这是一个简单的成员方法调用。this和super关键字进行区分和调用。super关键字调用父类的方法。super())来创建父类对象,并进行必要的初始化。this和super的区别:this表示当前对象,用于访问本类成员变量和方法;super表示父类对象,用于调用父类构造方法或访问父类成员变量。通过以上内容的学习和实践,您可以更好地理解Java中继承关系中的成员变量、方法和构造方法的使用,从而在实际开发中灵活运用这些概念。
转载地址:http://swksz.baihongyu.com/