一、封装(Encapsulation)

      封装也称信息隐藏,是指利用抽象数据类型把数据和基于数据的操作封装起来,使其成为一个不可分割的整体,数据隐藏在抽象数据内部,尽可能的隐藏数据细节,只保留一些接口使其与外界发生联系

     封装性的思想:

  • 将类的属性私有化
  • 提供公共的方法(setter & getter)来实现调用
package com.yyx.pratice;

/**
 * JavaBean
 */
public class Person {
    private String name;
    private Integer age;

    public Person() {
        super();
    }

    public Person(String name, Integer age) {
        super();
        this.name = name;
        this.age = age;
    }

    /*
     * 封装属性
     */
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}

二、继承(Inheritance)

      继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力   

      继承所表达的就是一种对象类之间的相交关系,它使得某类对象可以继承另外一类对象的数据成员和成员方法。

若类B继承类A,则属于B的对象便具有类A的全部或部分性质(数据属性)和功能(操作),我们称被继承的类A为基类、父类或超类,而称继承类B为A的派生类或子类

 注意:java中类的继承性只支持单继承:一个类只能继承一个父类。反之,一个父类可以有多个子类;一个接口可以有多个父类,也就是接口可以是多继承

           子类实例化对象会先创建父类的对象

package com.yyx.pratice;

public class Person {
    private String name;
    private Integer age;

    public Person() {
        super();
        System.out.println("我是父类的空参构造器");
    }

    public Person(String name, Integer age) {
        super();
        this.name = name;
        this.age = age;
        System.out.println("我是父类的有参构造器");
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public void eat() {
        System.out.println("吃饭!");
    }

    public void walk() {
        System.out.println("走路!");
    }
}
package com.yyx.pratice;

public class Student extends Person {
    private String stuNo;

    public Student() {
        super();
    }

    public Student(String name, Integer age, String stuNo) {
        super(name, age);
        this.stuNo = stuNo;
    }

    public String getStuNo() {
        return stuNo;
    }

    public void setStuNo(String stuNo) {
        this.stuNo = stuNo;
    }

    @Override
    public void eat() {
        super.eat();// 显示调用父类的eat()方法
        System.out.println("我重写了父类的eat()方法");
    }

    public void study() {
        System.out.println("子类自己的study()方法");
    }
}
package com.yyx.pratice;

public class JavaPratice {
    public static void main(String[] args) {
        Student student=new Student();
        student.eat();
        student.walk();
        student.study();

        Student stu=new Student("李四", 23, "1232");
        stu.eat();
        stu.walk();
        stu.study();
    }
}

运行结果:

我是父类的空参构造器
吃饭!
我重写了父类的eat()方法
走路!
子类自己的study()方法
我是父类的有参构造器
吃饭!
我重写了父类的eat()方法
走路!
子类自己的study()方法

三、多态(Polymorphism)

     多态性,可以理解为一个事物的多种表型形态。 两种表现形式:1)方法的重载与重写    2)子类对象的多态性

子类对象的多态性即父类的引用指向子类对象,父类引用只能调用父类中存在的方法和属性,不能调用子类的扩展部分,因为父类引用指向的是堆中子类对象继承的父类;

但是如果强制把超类转换成子类的话,就可以调用子类中新添加而超类没有的方法了;同时,父类中的一个方法只有在父类中定义而在子类中没有重写的情况下,才可以被父类类型的引用调用;

对于父类中定义的方法,如果子类中重写了该方法,那么父类类型的引用将会调用子类中的这个方法,这就是动态连接

 子类对象的多态性使用的前提:①要有类的继承或实现②要有子类对父类方法的重写

程序运行分为编译状态和运行状态。对于多态性来说,编译时,"看左边",将此引用变量理解为父类的类型;运行时,"看右边",关注于真正对象的实体:子类的对象。那么执行的方法就是子类重写的

package com.yyx.pratice;

public class JavaPratice {
    public static void main(String[] args) {
        Person person = new Student();
        person.eat();// 只能调用子类已经重写的父类Person的eat()方法
        if (person instanceof Student) {
            Student stu1 = (Student) person;
            /*
             * 调用子类才有的方法
             */
            stu1.study();
            stu1.walk();
        }

        Behavior behavior = new Student();
        behavior.walk();// 只能调用子类已经重写的接口Behavior的walk()方法
        if (behavior instanceof Student) {
            Student stu2 = (Student) behavior;
            /*
             * 调用子类才有的方法
             */
            stu2.study();
            stu2.eat();
        }
    }
}

class Student extends Person implements Behavior {

    @Override
    public void eat() {
        super.eat();
    }

    @Override
    public void walk() {
        System.out.println("人都要走路");
    }

    public void study() {
        System.out.println("学生要学习");
    }

}

class Person {
    public void eat() {
        System.out.println("人都要吃饭");
    }
}

interface Behavior {
    void walk();
}

Java面向对象的三大特征详解的更多相关文章

  1. Java面向对象的三大特征

    Java面向对象的三大特征 java面向对象的三大特征:“封装.继承.多态”.更多Java技术知识,请登陆疯狂软件教育官网.微信搜索微信号:疯狂软件,参加2015年优惠活动,有机会获得优惠劵和代金劵. ...

  2. Java面向对象的三大特征和五大原则

    Java面向对象的三大特征 封装 封装(Encapsulation)是指属性私有化,根据需要提供setter和getter方法来访问属性.即隐藏具体属性和实现细节,仅对外开放接口,控制程序中属性的访问 ...

  3. Java面向对象之各种变量详解

    在Java中一定有很多变量让大家头疼,成员变量.类变量.局部变量等等,今天就来分别认识认识他们吧! Java面向对象之各种变量详解 前言 在 Java语言中, 根据定义变量位置的不同,可以将变量分成两 ...

  4. JAVA面向对象:三大特征 封装讲解

    一.JAVA封装 1.封装的理解 封装是 JAVA 面向对象思想的 一 种特性,也是一种信息隐蔽的技术 2.封装的原则 将类中的某些信息隐藏起来,来防止外部程序直接访问,通过类中的方法实现对隐藏的信息 ...

  5. Java面向对象中this关键字详解 意义+实例讲解【hot】

    this关键字 >>>便于理解简单的定义 this关键字可以简单的理解为,谁调用this所在的方法,this就是谁. 类的构造函数与getter.setter方法常用到this关键字 ...

  6. 封装是java面向对象编程三大特征之一。 简单的属性封装

    package com.cqvie.Hello; class Person { private int age; private String name; public void tell() {   ...

  7. Java学习:面向对象的三大特征:封装性、继承性、多态性之继承性

    面向对象的三大特征:封装性.继承性.多态性. 继承 继承是多态的前提 ,如果没有继承,就没有多态. 继承主要解决的问题就是:共性抽取. 继承关系当中的特点: 子类可以拥有父类的“内容” 子类还可以拥有 ...

  8. 谈谈Java面向对象的三大特性

    Java面向对象的三大特性就是指封装.继承.多态了. 一.封装: 概念:封装是指隐藏对象的属性和实现细节,仅对外提供公共访问方式. (举例:笔记本电脑就是一个封装体,Java语言中最小的封装体就是函数 ...

  9. Java虚拟机之垃圾回收详解一

    Java虚拟机之垃圾回收详解一 Java技术和JVM(Java虚拟机) 一.Java技术概述: Java是一门编程语言,是一种计算平台,是SUN公司于1995年首次发布.它是Java程序的技术基础,这 ...

随机推荐

  1. tf.nn.softmax_cross_entropy_with_logits的用法

    http://blog.csdn.net/mao_xiao_feng/article/details/53382790 计算loss的时候,最常见的一句话就是tf.nn.softmax_cross_e ...

  2. G 全然背包

    <span style="color:#3333ff;">/* /* _________________________________________________ ...

  3. Cocos2d-x 3.0 打造一个全平台概念文件夹

    Cocos2d-x 3.0 打造一个全平台概念文件夹http:// www.eoeandroid.com/thread-328055-1-1.html

  4. POJ2376 Cleaning Shifts 【贪心】

    Cleaning Shifts Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 11542   Accepted: 3004 ...

  5. ffmpeg h264编码 extradata 为空

    ffmpeg h264编码的例子前面的文章已经介绍,本来主要讲述影响AVCodecContext extradata是否为 空的配置项.如果要求open编码器以后AVCodecContext extr ...

  6. ES7前端异步玩法:async/await理解 js原生API妙用(一)

    ES7前端异步玩法:async/await理解   在最新的ES7(ES2017)中提出的前端异步特性:async.await. 什么是async.await? async顾名思义是“异步”的意思,a ...

  7. Java与设计模式-责任链模式

    责任链模式属于行为型设计模式之中的一个,怎么理解责任链?责任链是能够理解成数个对象首尾连接而成,每个节点就是一个对象.每个对象相应不同的处理逻辑,直至有一个对象响应处理请求结束.这一种模式成为责任链模 ...

  8. 搭建基于Jenkins的CI服务器

    安装Jenkins和创建任务这些操作网上一搜一大把,这里就没必要写了,直接就开始编译.单元测试,覆盖,git提交触发构建,构建失败发送给提交人邮件. 因为项目比较复杂,为了懒省事我直接在CI服务器上安 ...

  9. java 连接mysql 和sql server2008代码

    这两天用java分别连接mysql和sql server2008代码.刚開始都是有错.如今找到了在 自己机器上成功连接的代码: 1. mysql Class.forName("com.mys ...

  10. JavaScript根据Json数据来做的模糊查询功能

    类似于百度搜索框的模糊查找功能 需要有有已知数据,实现搜索框输入字符,然后Js进行匹配,然后可以通过鼠标点击显示的内容,把内容显示在搜索框中 当然了,正则只是很简单的字符匹配,不具备多么复杂的判断 & ...