Java面向对象特征后续

多态:

父类引用指向子类对象,从而产生多种形态。

Animal dog = new Dog();

Animal cat = new Cat();

同一种事物,在不同时刻表现不同状态。

二者存在直接或者间接的继承关系时,父类引用指向子类的对象,即 形成多态。

当编译期类型是父类,运行期类型是子类时,被称为父类引用指向子类对象。

向上转型(子类转换为父类):
class Animal{
void eat(){ }
}
class Cat extends Animal{
void eat() {
System.out.println("狗吃骨头");
}
}………
Animal x=new Cat() //向上造型,Cat对象提升到Animal对象
x.eat() //在编译奇迹只能调用父类中定义的方法, 如果子类重写了父类方法,那么运行时
调用子类重写的方法
向下转型(父类转换为子类):
class Animal{
void eat(){ }
}
class Cat extendsAnimal{
void look() {
System.out.println("看家");
}
} ………
Animal x=new Cat()
x.look();//编译报错,Animal类型中没有look方法
Cat m=(Cat)x; //需要向下转型,转为Cat类型
m.eat() ;
m.look();//子父类中的方法都可以使用
作用:

为了使用子类中的特有方法。

好处:

提高代码扩展性。

class Animal{
void eat() { }
}
class Cat extends Animal{
void eat() { }
}
class Dog extends Animal{
void eat(){ }
}
//方法的形式参数类型是父类类型,而传递的实际参数可以是任意子类的对象
method(Animal animal){
animal .eat();
}
对成员方法的调用:
class Animal{
void show() {
System.out.println(“Anmial");
}
}
class Cat extends Animal{
void show() {
System.out.println(“cat");
}
}……. Animal x = new Cat()
x.show() //调用的是子类中的方法
简单的说:编译看左边,运行看右边。
对静态成员方法的调用:
class Animal{
static void show() {
System.out.println(“Animal");
}
}
class Cat extends Animal {
static void show() {
System.out.println(“Cat");
}
}……. Animal x = new Cat()
x.show() //调用的是动物类中的静态成员方法。 简单的说:编译和运行都看左边
对成员变量的调用:
class Animal{
int num = 3;
}
class Cat extends Animal {
int num = 4;
}……. Animal x = new Cat()
x.num; //调用的是动物类中的成员变量。
简单的说:

编译和运行都看等号左边。

注意:

变量不存在被子类覆写这一说法,只有方法存在覆写。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值