美文网首页
5.3-全栈Java笔记:面向对象特征(二)封装、多态

5.3-全栈Java笔记:面向对象特征(二)封装、多态

作者: 全栈JAVA笔记 | 来源:发表于2017-06-30 09:31 被阅读74次

    封装(encapsulation)

    封装的作用和含义

    我要看电视,只需要按一下开关和换台就可以了。有必要了解电视机内部的结构吗?有必要碰碰显像管吗?制造厂家为了方便我们使用电视,把复杂的内部细节全部封装起来,只给我们暴露简单的接口,比如:电源开关。具体怎么内部实现的,我们不需要操心。

    需要让用户知道的暴露出来,不需要让用户了解的全部隐藏起来。这就是封装。

    我们程序设计要追求“高内聚,低耦合”。 高内聚就是类的内部数据操作细节自己完成,不允许外部干涉;低耦合:仅暴露少量的方法给外部使用,尽量方便外部调用。 

    编程中封装的具体优点:

    “低耦合”:简化外部调用,便于调用者使用,便于扩展和协作。

    “高内聚”:封装细节,便于修改内部代码,提高可维护性。

    使用访问控制符,实现封装

    JAVA是使用“访问控制符”来控制哪些细节需要封装、哪些细节需要暴露。

    表 访问权限修饰符


    同一个类

    同一个包中

    子类

    所有类

    private

    *




    default

    *

    *



    protected

    *

    *

    *


    public

    *

    *

    *

    *

    1.  private 表示私有,只有自己类能访问

    2.  default表示没有修饰符修饰,只有同一个包的类能访问

    3.  protected表示可以被子类访问

    4.   public表示可以被所有类访问

    封装的使用细节

    类的属性的处理:

     1.一般使用private.(除非本属性确定会让子类继承)

     2.提供相应的get/set方法来访问相关属性. 这些方法通常是public,从而提供对属性的读取操作。(注意:boolean变量的get方法是用:is开头!)

     3.一些只用于本类的辅助性方法可以用private,希望其他类调用的方法用public。

    【示例1JavaBean的封装实例

    public class Person {

        private String name;

        private int age;

        private boolean flag;

        public String getName() {

           return name;

        }

        public void setName(String name) {

           this.name = name;

        }

        public int getAge() {

           return age;

        }

        public void setAge(int age) {

           this.age = age;

        }

        public boolean isFlag() {

           return flag;

        }

        public void setFlag(boolean flag) {

           this.flag = flag;

        }

    }

        return flag;

        }

        public void setFlag(boolean flag) {

           this.flag = flag;

        }

    }

    多态(polymorphism)

    多态指的是同一个方法调用,由于对象不同可能会有不同的行为。现实生活中,同一个方法,具体实现会完全不同。 比如:

    同样是调用人的“休息”方法。张三是睡觉,李四是旅游,高淇是敲段代码,数学教授是做个数学题。

    多态的要点:

    1.多态是方法的多态,不是属性的多态。

    2.多态的存在要有3个必要条件:要有继承,要有方法重写,父类引用指向子类对象 

    【示例2】多态和强制类型转换测试

    public class   TestPolym {

        public static void   main(String[] args) {

           Animal animal = new   Dog();  //向上可以自动转型

           //传的具体是哪一个类就调用哪一个类的方法。大大提高了程序的可扩展性。

           //如果没有多态,我们这里需要写很多重载的方法。如果增加一种动物,就需要重载一种动物的喊叫方法。非常麻烦。

           //有了多态,只需要增加这个类继承Animal基类就可以了。

           animalCry(new   Dog());

           animalCry(new   Cat());

           Dog dog = (Dog) animal;  //编写程序时,如果想调用运行时类型的方法,只能进行强制类型转换。不然通不过编译器的检查。

        }

        static void   animalCry(Animal a){

           a.shout();

        }

    }

    class   Animal {

        public void   shout(){

           System.out.println("叫了一声!");

        }

    }

    class   Dog extends Animal {

        public void   shout() {

           System.out.println("旺旺旺!");

        }

        public void   seeDoor(){

           System.out.println("看门中....");

        }

    }

    class   Cat extends Animal {

        public void   shout() {

           System.out.println("喵喵喵喵!");

        }

    }

       示例2  运行效果图


    「全栈Java笔记」是一部能帮大家从零到一成长为全栈Java工程师系列笔记。笔者江湖人称 Mr. G,10年Java研发经验,曾在神州数码、航天院某所研发中心从事软件设计及研发工作,从小白逐渐做到工程师、高级工程师、架构师。精通Java平台软件开发,精通JAVAEE,熟悉各种流行开发框架。

     笔记包含从浅入深的六大部分:

     A-Java入门阶段

     B-数据库从入门到精通

     C-手刃移动前端和Web前端

     D-J2EE从了解到实战

     E-Java高级框架精解

     F-Linux和Hadoop 

    相关文章

      网友评论

          本文标题:5.3-全栈Java笔记:面向对象特征(二)封装、多态

          本文链接:https://www.haomeiwen.com/subject/mcjbcxtx.html