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();  //猫吃鱼

    }
}
发布了302 篇原创文章 · 获赞 23 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/hello_cmy/article/details/105176026
今日推荐