Java面向对象的三大特征详解

一、封装(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();
}

原文地址:https://www.cnblogs.com/guhun/p/8522493.html

时间: 2024-10-11 18:19:58

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

Java面向对象的三大特征

Java面向对象的三大特征: 封装.继承.多态 封装和继承几乎都是为多态而准备的 一.      封装 首先,属性能够描述事物的特征,方法能够描述事物的动作.封装就是把同一类事物的共性(包括属性和方法)归到同一类中,方便使用. 封装:封装也称信息隐藏,是指利用抽象数据类型把数据和基于数据的操作封装起来,使其成为一个不可分割的整体,数据隐藏在抽象数据内部,尽可能的隐藏数据细节,只保留一些接口使其与外界发生联系.也就是说用户无需知道内部的数据和方法的具体实现细节,只需根据留在外部的接口进行操作就行.

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

Java面向对象的三大特征 封装 封装(Encapsulation)是指属性私有化,根据需要提供setter和getter方法来访问属性.即隐藏具体属性和实现细节,仅对外开放接口,控制程序中属性的访问级别. 封装目的:增强数据安全性,不能让其他用户随意访问和修改数据,和简化编程,使用者不必在意具体实现细节,而只是通过外部接口即可访问类的成员. 继承 继承(Extend)是指将多个相同的属性和方法提取出来,新建一个父类Java中一个类只能继承一个父类,且只能继承访问权限非private的属性和方法

Java面向对象编程三大特征 - 封装

Java面向对象编程三大特征 - 封装 本文关键字:Java.面向对象.三大特征.封装封装是面向对象编程中的三大特征之一,在对封装性进行解释时我们有必要先了解一些面向对象的思想,以及相关的概念.当我们想要去描述一系列的关系时我们要用到的最基本结构就是类,其中存在着成员变量和方法,用于记录属性和表达行为,相关知识请进传送门:Java中的基本操作单元 - 类和对象. 一.名词解读 为了解释封装的概念和作用,需要先来了解一下几个相关的概念,这有助于我们接下来的理解. 1. 权限修饰符 当我们在一个类中

Java面向对象编程三大特征 - 多态

Java面向对象编程三大特征 - 多态 本文关键字:Java.面向对象.三大特征.多态多态是面向对象编程的三大特征之一,是面向对象思想的终极体现之一.在理解多态之前需要先掌握继承.重写.父类引用指向子类对象的相关概念,对继承还没有完全明白的同学可进传送门:Java面向对象编程三大特征 - 继承. 一.抽象类 在继承中,我们已经了解了子父类的关系以及如何对子父类进行设计,如果已经存在多个实体类,再去定义父类其实是不断的抽取公共重合部分的过程,如果有需要将会产生多重继承关系.在抽取整理的过程中,除了

Java 面向对象的三大特征

面向对象主要由三大特性: 封装 继承 多态 一.封装 1.封装的概念 封装性是面向对象编程的核心思想 指的就是将描述某种实体的数据和基于这些数的操作集合到一起,形成一个封装体 封装的思想保证了类内部数据结构的完整性,使用户无法轻易直接操作类的内部数据,这样降低了对内部数据的影响,提高了程序的安全性和可维护性. 2.封装的好处 只能通过规定方法访问数据 隐藏类数实现细节 方便修改实现 方便加入控制语句 3.封装的使用 1).修改属性的可见性   ——> 设为private 2).创建共有的 get

Java面向对象的三大特征:封装、继承和多态

封装: 封装就是把抽象出的数据和对数据的操作封装在一起,数据被保护在内部,程序的其他部分只有通过被授权的操作(成员方法),才能对数据进行操作. 封装--访问控制修饰符(Java提供四种访问控制修饰符) 1.public  :公开级别,范围最广的. 2.protected:受保护级别,对子类和同一个包内的类公开. 3.default:默认级别,可以不写修饰符号,向同一个包的类公开. 4.private:私有级别,只有类本身可以访问,不对外公开. 继承: 继承可以解决代码复用,让我们的编程更加靠近人

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

package com.cqvie.Hello; class Person { private int age; private String name; public void tell() {  System.out.println("姓名:"+name+"  "+"年龄:"+age);  }  public int getAge()  {   return age; }  public void setAge(int age)  {  th

面向对象的三大特征——全网最详解析

面向对象的三大特征--封装性.继承性.多态性 类的封装性 封装是将数据以及对数据的操作组合起来构成类,类是一个不可分割的独立单位.类中提供与外部联系的方法,又尽可能隐藏类的实现细 节. 封装性提供一种软件模块化的设计思想,像组装硬件一样.类的设计者提供标准化的软件模块,使用者根据实际需求选择所需要的类模块, 集成为软件系统,各模块之间通过传递参数等方式进行工作.设计者需要考虑类的定义.类中数据和方法的访问权限以及方法如何实现等问题: 使用者需知道有哪些类,每个类的特点,每个类提供了哪些常量.成员

JAVA:23种设计模式详解(转)

设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代 码可靠性. 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样.项目中合理的运用 设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与之对应,每一个模式描述了一个在我