关于继承与多态

继承是面向对象的特征之一(封装,继承,多态),是指在父类中定义相关属性和方法,当子类需要使用父类属性和方法时,通过extends关键字获取,这样做减少代码量。

多态是指同一操作(同一方法)作用于不同的对象具有不同的结果,即一个事物具有多种形态,多态通过继承来实现。

  1. 多态情况下,子父类存在同名的成员变量时,访问的是父类的成员变量。
  2. 多态情况下,子父类存在同名的非静态的成员函数时,访问的是子类的成员函数。
  3. 多态情况下,子父类存在同名的静态的成员函数时,访问的是父类的成员函数。
  4. 多态情况下,不能访问子类特有的成员。
    总结:多态情况下,子父类存在同名的成员时,访问的都是父类成员,除了在同名非静态函数时才是访问子类的。

下面借助一个事例来说明:
先定义一个父类Animal类,里面有一个voice方法。

父类:
public class Animals {
String voice;
public static void voice(String voice){

System.out.println(“动物叫声”+voice);
}}

再定义一个子类Dog类,继承了Animal类,并重写了Animal类中的voice方法

子类
public class Dog extends Animals{
static String dogVoice=“汪汪”;
public static void voice(String dogVoice){ System.out.println(“狗的叫是:”+dogVoice); }
}

如何在主函数中不定义字符串,直接通过构造方法传参来打印输出?
主类:
public class Zhu {
/** * @param args */
public static void main(String[] args) {
// TODO Auto-generated method stub Animals.voice(Dog.dogVoice);
}
}
这里有一个注意点:
当需要调用一个类中的属性和方法时,需要先将这个类实例化并通过对象名.的方式来调用
例如在Main中调用另一个类Dog类中的字符串String voice时,方法为Dog.dogvoice,同理,方法为Dog.voice
(类在使用之前必须实例化)
例如:Animals animal=new Animals()
这句话有以下意思:
实例化一个Animals类对象名为animals,并为其开辟空间。
Animals animals=new Dog();

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值