Java 面向对象三大特性:封装 继承 多态

Java 面向对象三大特性:封装 继承 多态

封装

封装指的是属性私有化,根据需要提供setter和getter方法来访问属性。即隐藏具体属性和实现细节,仅对外开放接口,控制程序中属性的访问级别。

封装目的:增强安全性和简化编程,使用者不必在意具体实现细节,而只是通过外部接口即可访问类的成员。

继承

继承是指将多个相同的属性和方法提取出来,新建一个父类。
Java中一个类只能继承一个父类,且只能继承访问权限非private的属性和方法。 子类可以重写父类中的方法,命名与父类中同名的属性。

继承目的:代码复用。

多态

多态是同一个行为具有多个不同表现形式或形态的能力。

多态就是同一个接口,使用不同的实例而执行不同操作。

多态又分为 编译时多态和运行时多态。
编译时多态:比如重载
运行时多态:比如重写

多态存在的三个必要条件

  • 继承
  • 重写
  • 父类引用指向子类对象

如下面的猫狗案例:

package com.cc.demo1;

public class Animal {

    public void eat() {
        System.out.println("吃饭");
    }
}
package com.cc.demo1;

public class Dog extends Animal {

    @Override
    public void eat() {
        System.out.println("狗吃肉");
    }

    public void lookDoor() {
        System.out.println("狗看门");
    }
}
package com.cc.demo1;

public class Cat extends Animal {

    @Override
    public void eat() {
        System.out.println("猫吃鱼");
    }

    public void playGame() {
        System.out.println("猫玩捉迷藏");
    }
}
package com.cc.demo1;

public class Test1 {
    public static void main(String args[]) {
        //定义为狗
        Animal a = new Dog();
        a.eat();   //狗吃肉
        //a.lookDoor();报错,此时看父Animal,Animal中没有lookDoor()
        System.out.println("---------");

        //还原为狗
        Dog d = (Dog) a;
        d.eat();  //狗吃肉
        d.lookDoor();//狗看门
        System.out.println("---------");

        //变成猫
        a = new Cat();
        a.eat(); //猫吃鱼
        //a.playGame();报错,a还是Animal,没有playGame()
        System.out.println("---------");

        //还原成猫
        Cat c = (Cat)a;
        c.eat(); //猫吃鱼
        c.playGame(); //猫玩捉迷藏
        System.out.println("---------");
    }
}

实现多态可以用继承,当然也可以使用接口。

如下面的例子:

package com.cc.demo1;

public interface Animal {
    public void eat();
}

package com.cc.demo1;

public class Dog implements Animal {

    @Override
    public void eat() {
        System.out.println("狗吃肉");
    }
}
package com.cc.demo1;

public class Cat implements Animal {
    @Override
    public void eat() {
        System.out.println("猫吃鱼");
    }
}
package com.cc.demo1;

public class Test2 {
    public static void main(String args[]) {
        Animal animal1   = new Dog();
        animal1.eat();  //狗吃肉

        System.out.println();

        //Animal animal2 = new Cat();
        animal1 = new Cat();
        animal1.eat();  //猫吃鱼

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值