面向对象(继承中构造方法的注意事项)
- A:案例演示(核心点在于子类构造方法中的第一句必须是父类的构造方法的执行,如果父类有无参构造方法,子类构造方法的第一句是默认的
super();
且可以省略,如果父类没有无参的构造方法,只有有参的构造方法,则super不能省略,super()中加上对应得参数就行了- 父类没有无参构造方法,只有有参构造方法,子类怎么办?
- super解决:
- this解决
- B:注意事项
- super(…)或者this(….)必须出现在构造方法的第一条语句上
class Demo6_Extends {
public static void main(String[] args) {
Son s1 = new Son();
/*
1.调用Son无参构造方法
2.到`this("王五",25);`语句,this代表当前对象,因此调用当前Son类得有参构造方法`public Son(String name,int age) { //有参构造`
3.到`super(name,age);`语句,开始调用父类的有参构造方法`
this.name = name;
this.age = age;
System.out.println("Father 有参构造");`,
完成后执行` System.out.println("Son 有参构造");`语句
4.自行完之后输出` System.out.println("Son 空参构造");`
*/
System.out.println(s1.getName() + "..." + s1.getAge());
System.out.println("--------------------");
Son s2 = new Son("张三",23);
System.out.println(s2.getName() + "..." + s2.getAge());
}
}
class Father {
private String name; //姓名
private int age; //年龄
public Father() { //空参构造
System.out.println("Father 空参构造");
}
public Father(String name,int age) { //有参构造
this.name = name;
this.age = age;
System.out.println("Father 有参构造");
}
public void setName(String name) { //设置姓名
this.name = name;
}
public String getName() { //获取姓名
return name;
}
public void setAge(int age) { //设置年龄
this.age = age;
}
public int getAge() { //获取年龄
return age;
}
}
class Son extends Father {
public Son() { //空参构造
this("王五",25); //本类中的构造方法
//super("李四",24); //调用父类中的构造方法
System.out.println("Son 空参构造");
}
public Son(String name,int age) { //有参构造
super(name,age);
System.out.println("Son 有参构造");
}
}
面向对象(继承中的面试题)
- A:案例演示
-
看程序写结果1 class Fu{ public int num = 10; public Fu(){ System.out.println("fu"); } } class Zi extends Fu{ public int num = 20; public Zi(){ System.out.println("zi"); } public void show(){ int num = 30; System.out.println(num); System.out.println(this.num); System.out.println(super.num); } } class Test1_Extends { public static void main(String[] args) { Zi z = new Zi(); z.show(); } }
输出结果为:
fu
zi
30
30
10
看程序写结果2
class Fu {
static {
System.out.println("静态代码块Fu");
}
{
System.out.println("构造代码块Fu");
}
public Fu() {
System.out.println("构造方法Fu");
}
}
class Zi extends Fu {
static {
System.out.println("静态代码块Zi");
}
{
System.out.println("构造代码块Zi");
}
public Zi() {
System.out.println("构造方法Zi");
}
}
Zi z = new Zi(); 请执行结果。
输出结果为:
静态代码块Fu
静态代码块Zi
构造代码块Fu
构造方法Fu
构造代码块Zi
构造方法Zi"