1.Judging right from wrong
(inheritance)
1.A child class inherits everything from its parent class.
2.A child class cannot inherit the constructors from its parent class .
子类继承的内容:
字段(成员变量):
子类会继承父类的字段,包括实例变量和静态变量。子类可以直接访问继承而来的字段。
方法:
子类会继承父类的方法,包括实例方法和静态方法。子类可以直接调用继承而来的方法。
子类可以重写(override)父类的方法,以提供特定于子类的实现。
构造方法:
如果子类没有定义构造方法,它会默认调用父类的无参构造方法(如果父类有的话)。
如果子类定义了构造方法,可以使用 super
关键字调用父类的构造方法。
接口的实现:
如果父类实现了某个接口,子类也会继承该接口的实现,除非子类明确地重新实现了该接口。
子类不继承的内容:
私有成员:
子类不会继承父类中的私有成员(私有字段、私有方法)。
构造方法:
子类不会继承父类的构造方法。但是,子类可以通过使用 super
调用父类的构造方法来初始化继承的部分。
父类的****静态成员:
子类不会继承父类的静态成员。静态成员是与类关联的,而不是与对象关联的。
父类的****构造方法私有属性:
如果父类的构造方法是私有的,子类不能直接调用父类的构造方法。这通常会限制子类对父类构造方法的继承。
在Java中,子类会继承其父类的一些特性,但并非所有内容都会被继承。—> F,F
3.The superclass’s constructor must be explicitly invoked in the subclass’s constructor.
在Java中,当你在子类中创建构造函数时,通常需要显式调用超类的构造函数,使用super关键字来实现。如果在子类构造函数中没有显式调用超类构造函数,Java将隐式插入对超类默认(无参)构造函数的调用。
下面是一个示例,说明了这个概念:
class Superclass {
// Default constructor---无参构造方法
public Superclass() {
System.out.println("Superclass default constructor");
}
// Parameterized constructor---含参构造方法
public Superclass(int x) {
System.out.println("Superclass parameterized constructor with x = " + x);
}
}
class Subclass extends Superclass {
// Implicit call to the default constructor of the superclass
// if this constructor doesn't explicitly call a superclass constructor
public Subclass() {
//这里隐含super()
System.out.println("Subclass constructor");
}
// Explicit call to the parameterized constructor of the superclass
public Subclass(int y) {
super(y); // Call to the parameterized constructor of the superclass
System.out.println("Subclass constructor with y = " + y);
}
}
public class Main {
public static void main(String[] args) {
Subclass obj1 = new Subclass();
Subclass obj2 = new Subclass(10);
}
}
子类Subclass在无参构造函数(Subclass())中隐式调用了超类Superclass的默认构造函数。在有参构造函数(Subclass(int y))中,通过使用super(y)显式调用了超类的带参数构造函数。
值得注意的是,如果超类没有默认构造函数,并且在子类构造函数中没有显式调用超类构造函数,那么将会引发编译错误。因为Java子类构造函数的第一条语句
要么是使用super显式调用超类构造函数,
要么是隐式调用超类的默认构造函数。
2.selection
Questions refer to the BankAccount, SavingsAccount, and CheckingAccountclasses defined below:
(Constructor,inheritance)
- Of the methods shown, how many different nonconstructor methods can be invoked by a SavingsAccount object? —> 找SavingAccount调用的非构造方法的个数
(A) 1 (B) 2 © 3 (D) 4 (E)5
因为我们之前已经学过什么是构造方法什么是继承,并且知道继承会继承父类的方法,若有遗忘点击👉🔗:http://t.csdnimg.cn/MZtBH
so 是4个—>D
调用父类构造方法的语句super()必须位于子类构造方法语句的句首。
- Which is a correct implementation of the constructor with parameters in the SavingsAccount class?
A: 不可以直接给父类私有变量直接赋值,对于父类的私有变量需要通过父类提供public的构造方法进行变量修改。
B:有getbalance只是返回balance的值,并不是把它的值给balance所以B不正确。
C:super();只是调用父类无参构造方法,balance = 0;
但是并未将accountBlance赋值给balance,所以错误
E: 父类不含两个参数构造方法,无法调用。
C:想要执行SavingsAccount class的含参构造方法,去修改参数的值,在子类可以 直接通过=赋值进行修改,而对于父类的私有变量需要通过父类提供public的构造方法进行变量修改。
如果父类类变量是private,要访问/修改父类私有变量,需要父类提供public的构造方法进行变量修改 —>D
学习路线:
这个方向初期比较容易入门一些,掌握一些基本技术,拿起各种现成的工具就可以开黑了。不过,要想从脚本小子变成黑客大神,这个方向越往后,需要学习和掌握的东西就会越来越多以下是网络渗透需要学习的内容: