疯狂java笔记——类的继承

继承是面向对象的三大特征之一,每个之类只能有一个直接父类, 但是可以有多个间接父类

【修饰符】 class classA extends classB{ } 直接父类

【修饰符】 class classA extends classC{ } 间接父类

 

不能这样写【修饰符】 class classA extends classB,classC{ }

从子类角度,是子类扩展(extends)了父类,从父类角度,父类派生(derive)了子类。

也就是说,扩展和派生是同一动作,只是角度不同。

 

重写父类

public class Bird

{

// Bird类的fly()方法

public void fly()

{

System.out.println("我在天空里自由自在地飞翔...");

}

}

 

public class Ostrich extends Bird

{

// 重写Bird类的fly()方法

public void fly()

{

System.out.println("我只能在地上奔跑...");

}

}

 

如果父类的方法是private修饰的,在子类中无法重写的,即使看起来一样,其实只是子类一个新的方法

 

重载:overload 同一类多个同名方法之间

重写:子类和父类的同名方法

 

 

super.方法();

可以在子类调用父类被重写的方法。

 

在子类中定义私有实例变量来隐藏父类的同名变量。

class Parent

{

public String tag = "疯狂Java讲义"; //①

}

class Derived extends Parent

{

// 定义一个私有的tag实例变量来隐藏父类的tag实例变量

private String tag = "轻量级Java EE企业应用实战"; //②

}

public class HideTest

{

public static void main(String[] args)

{

Derived d = new Derived();

// 程序不可访问d的私有变量tag,所以下面语句将引起编译错误

// System.out.println(d.tag); //③

// 将d变量显式地向上转型为Parent后,即可访问tag实例变量

// 程序将输出:“疯狂Java讲义”

System.out.println(((Parent)d).tag); //④

}

}

 

调用父类构造器

 

子类不会获得父类的构造器,但子类构造器里可以调用父类构造器的初始化代码。

在子类构造器调用父类构造器用super

class Base

{

public double size;

public String name;

public Base(double size , String name)

{

this.size = size;

this.name = name;

}

}

public class Sub extends Base

{

public String color;

public Sub(double size , String name , String color)

{

// 通过super调用来调用父类构造器的初始化过程

super(size , name);

this.color = color;

}

public static void main(String[] args)

{

Sub s = new Sub(5.6 , "测试对象" , "红色");

// 输出Sub对象的三个实例变量

System.out.println(s.size + "--" + s.name

+ "--" + s.color);

}

}

 

 

在子类重载构造器调用另一个构造器用this

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调用同一个类中重载的构造器

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();

}

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值