1.8 Java复习之继承

格式化代码:Ctrl+shift+f


继承


类间只能单继承(接口能多继承,弥补单继承的缺陷)







子类能获取得到父类private属性,但由于权限设置,不能调用




继承练习




方法的重写





下例说明该点:父类有private的sleep方法(背景),不视作重

写(eclipse无三角形),另外注意子类重写父类方法时,要求

“三同”,见上图。




super关键字



创建子类对象时,默认调用父类构造器,不认为创建了父类对

象,子类和父类的属性名可重合,认为是两个属性


下例为上文的super改写:

小tips:eat()等价于 this.eat()



super修饰构造器:


1)出现一个的原因在于都要求在首行声明

2)以上第三点尤为易忽略,注意任何类都有父类,即根父

类:object类

3)正由于第三点才会要求提供空参的构造器,以防默认调用父

类的空参构造器


关注person的空参构造器中省略了super(),即调用父类

object的构造器



上述super()可省略掉,参照第三条



关注第二个“这是。。。”出现的原因,由于嵌套的调用,最后

也调用了空参的构造器


总结:

类的重载构造器第一行一定出现this或super(不管隐式或显

式),原因见第三点




最多N-1个构造器使用this,剩下的必调用父类构造器,即

super(形参列表),继承树向上同理,一直到object类


子类实例化过程





图示说明




1)构造器为对象加载属性和方法

2)栈空间开辟引用变量,存储对象的引用值,堆空间开辟空

间,存储对象实体,将该空间的首地址值给变量的引用,通过引

用值指向堆空间区域


注意点:创建子类对象,在继承树中构造器会一直上溯(隐式或

显式),直到object类,总之,创建任何对象都会调用object的

空参的构造器


class Creature{
       public Creature(){
	System.out.println("Creature无参数的构造器");	
       }
}
class Animal extends Creature{
       public Animal(String name){
	System.out.println("Animal带一个参数的构造器,该动物的name为" + name);
       }
       public Animal(String name , int age){
	this(name);
	System.out.println("Animal带两个参数的构造器,其age为" + age);
       }
}
public class Wolf extends Animal{
       public Wolf(){
	super("灰太狼", 3);
	System.out.println("Wolf无参数的构造器");
       }
       public static void main(String[] args){
	new Wolf();
       }    }


输出结果为从上到下


练习1


Account

private int id

private double balance

private double annualInterestRate

public Account (int id, double balance, double annualInterestRate )

public int getId()

public double getBalance()

public double getAnnualInterestRate()

public void setId( int id)

public void setBalance(double balance)

public void setAnnualInterestRate(double annualInterestRate)

public double getMonthlyInterest()

public void withdraw (double amount)

public void deposit (double amount)




关注权限修饰符为protected,子类可直接调用


练习2


重写withdraw方法





猜你喜欢

转载自blog.csdn.net/lwz45698752/article/details/81028810
1.8