• 技术文章 >Java >java教程

    java的三大特性封装、继承、多态

    angryTomangryTom2019-07-17 08:41:10原创1432
      我们知道面向对象的三大特性是封装、继承和多态。然而我们有时候总是搞不清楚这些概念。下面对这些概念进行整理,

    为以后面向抽象的编程打下坚实的基础。

      封装的概念还是很容易理解的。如果你会定义类,那么相信你对封装的概念已经完全掌握了。下面定义的几个类,就是对数据的封装。

      继承的好处是代码复用。继承的子类自动拥有父类中的所有属性和方法。所以继承已存在的类就是复用这些类的方法和域。

    在此基础上,子类还可以添加一些新的方法和域,以满足新的需求。这是Java程序设计中的一项核心技术。

      那么如何判断是否需要继承呢?"is-a"关系是继承的一个明显特征。这句话的意思可以解释为:Student之所以继承Person,

    是因为Student 是Person。如果没有这个关系也就不需要这个继承了。这也是里氏替换原则的定义,子类型必须能够替换掉它们的父类型。

      在通过扩展超类定义子类的时候,仅需指出子类与超类的不同之处。因此在设计类时,应该将通用的方法放到超类中,

    而将具有特殊用途的方法放到子类中,这种将通用的功能放到超类的做法,在面向对象程序设计中十分普遍。

      动态绑定有一个非常重要的特性:无需对现存的代码进行修改,就可以对程序进行扩展。所以多态是开放封闭原则的基础。

      下面是一个继承和多态实现的具体例子:

    abstract 是抽象的关键字。(最好从抽象类继承而不是从具体类继承)。

    public abstract class Person {  // 抽象类
        private String name;  // 私有变量
        
        public String getName() {  // Getter方法
            return name;
        }    public void setName(String name) {  //Setter方法
            this.name = name;
        }        
        public Person(String name) {  // 构造函数,用于初始化name
            super();        this.name = name;
        }    public abstract String getDesc();  // 抽象类中的抽象方法。  只有声明,没有具体实现。
            public String toString(){      // toString方法覆盖了Object类的toString方法
             return name + getDesc();
          }
    
    }

    extends 是继承的关键字。Student继承Person,所以Student拥有name属性。

    public class Student extends Person {  // 继承类
        private String major; // 新增加的数据    
    
        public String getMajor() {        return major;
        }    public void setMajor(String major) {        this.major = major;
        }    
    
        public Student(String name,String major) { // 构造函数用于初始化
            super(name);   // 调用超类构造函数
            this.major = major;
        }
    
        @Override    public String getDesc() {  // 必须实现超类中的抽象方法        // TODO Auto-generated method stub
            return " : a student, major is " + major;
        }

    凡是继承超类的子类,必须实现(无论是哪种实现方式)超类中定义的抽象方法。

    public class Employee extends Person{
        private double salary;
        public double getSalary() {
            return salary;
        }public void setSalary(double salary) {
            this.salary = salary;
        } 
       public Employee(String name, double salary) {
           super(name);
           this.salary = salary;
        }
    
        @Override
        public String getDesc() {        // TODO Auto-generated method stub
            return " :a employee, salary is " + salary;
        }
    }
    public class Test {    public static void main(String[] args) {        // TODO Auto-generated method stub
            Person[] p=new Person[2];    
            p[0]=new Student("Mark", "IT");
            p[1]=new Employee("Jerry", 2000);        for (Person person : p) {
                System.out.println(person.getName()+person.getDesc());
            }
        }
    
    }

    运行结果

    091442149309691.png

    php入门到就业线上直播课:进入学习

    从这个例子也可以看出,没有封装就谈不上继承,而没有继承,就不可能有所谓的多态。

    而理解封装、继承和多态(特别是多态)是理解设计模式的基础。

    了解更多关于java的教程可以访问:Java教程

    以上就是java的三大特性封装、继承、多态的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

    前端(VUE)零基础到就业课程:点击学习

    清晰的学习路线+老师随时辅导答疑

    快捷开发Web应用及小程序:点击使用

    支持亿级表,高并发,自动生成可视化后台。

    专题推荐:java 封装 继承 多态
    上一篇:java获取键盘输入的值 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • ❤️‍🔥共22门课程,总价3725元,会员免费学• ❤️‍🔥接口自动化测试不想写代码?• Java基础:封装、方法重载、构造方法(构造函数)的介绍• java单继承是什么?• java为什么不能多继承• java中封装怎么写
    1/1

    PHP中文网