java面向对象中级-super

java面向对象中级-super

1. 基本介绍

  1. 调用父类构造器: 在子类的构造器中,使用 super(参数列表) 可以显式地调用父类的构造器。这是为了确保在创建子类对象时,父类的初始化也被正确地执行。
  2. 访问父类属性和方法: 如果子类中存在与父类同名的属性或方法,使用 super 可以引用父类的属性或方法。这对于避免属性或方法名称冲突很有帮助。
  3. 调用父类方法: 在子类方法中,可以使用 super 调用父类的同名方法,从而在子类方法中扩展父类方法的功能。

2. 基本语法

  1. 调用父类构造器
class Parent {
    Parent(int x) {
        // constructor code
    }
}

class Child extends Parent {
    Child(int x, int y) {
        super(x); // 调用父类的构造器
        // 子类的其他构造器代码
    }
}

  1. 引用父类成员
class Parent {
    int value = 10;
    void method() {
        // method code
    }
}

class Child extends Parent {
    int value = 20;

    void displayValues() {
        System.out.println("Child's value: " + value); // 访问子类的 value
        System.out.println("Parent's value: " + super.value); // 使用 super 访问父类的 value
    }

    void callMethods() {
        method(); // 调用子类的方法
        super.method(); // 使用 super 调用父类的方法
    }
}

备注:
  1. 访问父类的属性,但不能访问父类的private属性。
    super.属性名
  2. 访问父类的方法,不能访问父类的private方法
    super.方法名(参数列表);
  3. 访问父类的构造器:
    super(参数列表);只能放在构造器的第一句,只能出现一句

3. super给编程带来的便利/细节

  1. 调用父类构造器的好处(分工明确,父类的属性由父类初始化,子类的属性由子类初始化)
  2. 当子类中有父类的成员(属性和方法名)重名时,为了访问父类的成员,必须通过super。如果没有重名,使用super、this、直接访问是一样的效果
  3. super的访问不限于直接父类,如果爷爷类(父类的父类)和本类中有同名的成员,也可以使用super去访问爷爷类的成员;如果多个基类中都有同名的成员,使用super访问遵循就近原则。A -> B -> C

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
JAVA是一种面向对象的编程语言,它持封装、继承和多态等向对象的特性。下面是一个简单的JAVA面向对象的例子: 假设我们有一个物类Animal,它有属性name和age,并且有一个方法speak()用于输出动物的叫声。然后我们派生出两个子类Dog和Cat,它们分别继承了Animal类,并且重写了speak()方法。 ```java // Animal类 class Animal { private String name; private int age; public Animal(String name, int age) { this.name = name; this.age = age; } public void speak() { System.out.println("动物发出叫声"); } } // Dog类 class Dog extends Animal { public Dog(String name, int age) { super(name, age); } @Override public void speak() { System.out.println("汪汪汪"); } } // Cat类 class Cat extends Animal { public Cat(String name, int age) { super(name, age); } @Override public void speak() { System.out.println("喵喵喵"); } } // 测试类 public class Main { public static void main(String[] args) { Animal animal1 = new Dog("旺财", 3); Animal animal2 = new Cat("咪咪", 2); animal1.speak(); // 输出:汪汪汪 animal2.speak(); // 输出:喵喵喵 } } ``` 在上面的例子中,Animal类是一个基类,它定义了动物的属性和方法。Dog和Cat类是Animal类的子类,它们继承了Animal类的属性和方法,并且分别重写了speak()方法,实现了不同的叫声。在测试类中,我们创建了一个Dog对象和一个Cat对象,并调用它们的speak()方法,分别输出了不同的叫声。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值