探讨 java 的三大特性之一:继承

先回顾一下, Java 面向对象的三大特性包括:封装、继承、多态。

PS:还有一些说四大特性,加了一个抽象

封装:将属性私有化,对外提供访问属性的方法,也可以不提供方法,这个特性叫做封装。

继承:

  1. 子类拥有父类对象所有的属性和方法(包括私有属性和私有方法),但是父类中的私有属性和方法子类是无法访问,只是拥有。
  2. 子类可以拥有自己属性和方法,即子类可以对父类进行扩展。
  3. 子类可以用自己的方式实现父类的方法

多态:多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量到底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。   简单得说,就是一个类有多个子类,在创建类得对象时,不同的子类,表现出来方法结果是不一致的,可以有多种形态。

现在主要探讨,子类拥有父类的所有属性和方法,包括私有属性和私有方法。

父类:

package com.entity;

/**
 * @author Robert_mml
 */
public class BaseUser {

    public BaseUser(String name) {
        this.name = name;
    }

    public BaseUser(String name, String age) {
        this.name = name;
        this.age = age;
    }

    public BaseUser() {
        System.out.println("父类");
    }

    private BaseUser getInstance() {
        return new BaseUser();
    }

    private String name;

    private String age;

    public String like;

    public String getName() {
        return name;
    }

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

    public String getAge() {
        return age;
    }

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

    public String getLike() {
        return like;
    }

    public void setLike(String like) {
        this.like = like;
    }

    public String zToString() {
        return "BaseUser{" +
                "name=‘" + name + ‘\‘‘ +
                ", age=‘" + age + ‘\‘‘ +
                ", like=‘" + like + ‘\‘‘ +
                ‘}‘;
    }
}

子类:

package com.entity;

/**
 * @author  Robert_mml
 */
public class SysUser extends BaseUser {

    private String name;

    private String age;

    public String like;

    public SysUser(String name) {
        super(name);
    }

    public SysUser(){
        System.out.println("子类");
    }

//    @Override
    private SysUser getInstance() {
        return new SysUser();
    }

    public String getName() {
        return name;
    }

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

    public String getAge() {
        return age;
    }

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

    @Override
    public String getLike() {
        return like;
    }

    @Override
    public void setLike(String like) {
        this.like = like;
    }

    public String getSuperLike() {
        return super.getLike();
    }

    public void setSuperLike(String like) {
        super.setLike(like);
    }

    public String zToString() {
        return "SysUser{" +
                "name=‘" + name + ‘\‘‘ +
                ", age=‘" + age + ‘\‘‘ +
                ", like=‘" + like + ‘}‘ +
                "  BaseUser{ " + super.zToString() + ‘\‘‘ +
                ‘}‘ + "  BaseUser{ " + super.toString() + ‘\‘‘ +
                ‘}‘;
    }

}

发现子类拥有父类的私有属性时,子类已经可以自己拥有这些私有属性。并不会出现冲突。子类使用 @Override 标识相同的私有方法时,也会报错。

从这些看来,子类似乎不拥有父类的私有属性。

根据相关资料, 子类创建时,是会先创建一个父类对象,父类对象外层是一个子类,子类包含父类,在外层是子类的独有方法。

当子类和父类拥有相同名称的public属性,使用 @Override 标识依然报错,可以猜测,子类和父类,属性是在不同的内存空间。

Main:

package com.entity;

public class Main {

    public static void main(String[] args) {

        SysUser sysUser = new SysUser();

        sysUser.setLike("乒乓球");
        sysUser.setSuperLike("羽毛球");
        System.out.println(sysUser.toString());
        System.out.println(sysUser.zToString());
    }

}

结果:

父类
子类
[email protected]
SysUser{name=‘null‘, age=‘null‘, like=‘乒乓球}  BaseUser{ BaseUser{name=‘null‘, age=‘null‘, like=‘羽毛球‘}‘}  BaseUser{ [email protected]‘}

可以看出,父类的内存空间,是在子类上。

说明,父类在初始化时,是在子类的内存空间上进行初始化的,但是并没有创建一个真正的实例,但是子类属性是跟父类分开的。

PS:当把父类的无参构造方法去掉,仅保留有参构造方法时, 子类必须实现一个相同的有参构造方法,不实现会报错。

  当父类拥有多个构造方法,子类只需要实现其中一种即可。

Java 继承父类子类内存分配解释:

https://blog.csdn.net/smithdoudou88/article/details/12756187

原文地址:https://www.cnblogs.com/mmling/p/11814189.html

时间: 2024-10-12 22:41:29

探讨 java 的三大特性之一:继承的相关文章

【转】java提高篇(二)-----理解java的三大特性之继承

[转]java提高篇(二)-----理解java的三大特性之继承 原文地址:http://www.cnblogs.com/chenssy/p/3354884.html 在<Think in java>中有这样一句话:复用代码是Java众多引人注目的功能之一.但要想成为极具革命性的语言,仅仅能够复制代码并对加以改变是不够的,它还必须能够做更多的事情.在这句话中最引人注目的是"复用代码",尽可能的复用代码使我们程序员一直在追求的,现在我来介绍一种复用代码的方式,也是java三大

(1) 深入理解Java面向对象三大特性 封装 继承 多态

转眼已经工作快6年了,最开始做了2年J2EE:然后整了2年的数据仓库,主要是Cognos的报表开发:现在从事4G LTE核心网的开发,用的语言任然是Java,但写代码的机会不多,基本都是看代码找BUG,偶尔做点new feature也是在比较成熟的框架上复制.粘贴.修改,大部分时间还是在理解业务,钱多.事少.离家近,当时来这家公司图的是后面2点,2年过去了,英文水平有所提升,对敏捷开放也有一定的了解,但技术方面明显退步了或者说没有进步吧,本来以前也不怎么好,因为工作上用不到,自己也没怎么学习,所

java面向对象三大特性之继承

通过重用已经测试并验证通过的代码,怎样才减少开发工作,所有开发团队都在为一问题而努力.一个久经考验的方法是通过有效地使用Java继承优化应用程序开发. 继承的从某种意义上讲,继承的短暂美就如同宇宙中所有事与其它事情都存在一种特殊的关系. Java继承 Java继承是面向对象的最显著的一个特征.继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力. Java继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但

Java面向对象三大特性 封装 继承 多态

1.封装 封装的定义: 首先是抽象,把事物抽象成一个类,其次才是封装,将事物拥有的属性和动作隐藏起来,只保留特定的方法与外界联系 为什么需要封装: 封装符合面向对象设计原则的第一条:单一性原则,一个类把自己该做的事情封装起来,而不是暴露给其他类去处理,当内部的逻辑发生变化时,外部调用不用因此而修改,他们只调用开放的接口,而不用去关心内部的实现 举例: public class Human { private int age; private String name; public int get

理解java的三大特性之继承

学习来源:http://www.cnblogs.com/chenssy/p/3354884.html default 默认权限(包权限-同一个包可以访问) private 私有(类内部可以使用,继承的子类也不能访问) protected (类和包内部可以访问,其子类也可以访问) public  任何都可以访问 对于class 的权限修饰只可以用public和default  继承  java中使用extends关键字实现类的继承机制 通过继承,子类自动拥有了基类(superclass)的所有成员

理解java的三大特性

三大特性之---封装 封装从字面上来理解就是包装的意思,专业点就是信息隐藏,是指利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体,数据被保护在抽象数据类型的内部,尽可能地隐藏内部的细节,只保留一些对外接口使之与外部发生联系.系统的其他对象只能通过包裹在数据外面的已经授权的操作来与这个封装的对象进行交流和交互.也就是说用户是无需知道对象内部的细节(当然也无从知道),但可以通过该对象对外的提供的接口来访问该对象. 对于封装而言,一个对象它所封装的是自己的属性和方法,所

java随笔:三大特性之继承

Java三大特性之继承 一.介绍 笔记重点:构造器.protected关键字(这个自行查阅).向上转型.private关键字(继承非常重要的要点)  复用代码是Java众多引人注目的功能之一.但要想成为极具革命性的语言,仅仅能够复制代码并对加以改变是不够的,它还必须能够做更多的事情.在这句话中最引人注目的是"复用代码",尽可能的复用代码使我们程序员一直在追求的. 继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继

初步理解Java的三大特性——封装、继承和多态

声明:整理自网络,如有雷同,请联系博主处理 一.封装 封装从字面上来理解就是包装的意思,专业点就是信息隐藏,是指利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体,数据被保护在抽象数据类型的内部,尽可能地隐藏内部的细节,只保留一些对外接口使之与外部发生联系.系统的其他对象只能通过包裹在数据外面的已经授权的操作来与这个封装的对象进行交流和交互.也就是说用户是无需知道对象内部的细节(当然也无从知道),但可以通过该对象对外的提供的接口来访问该对象. 对于封装而言,一个对象

java基础篇(二) ----- java面向对象的三大特性之继承

java面向对象的三大特性之继承: 复用代码是java众多引人注目的功能之一,但是想要成为极具革命性的语言,仅仅是复制代码并对其加以改变是不够的.它必须能够做更多的事.引自<Think in java>    而代码复用也是程序员一直不断追求的.由此来说下代码复用的一种方式 java面向对象的三大特性--继承!! 在面向对象程序设计中,继承机制可以有效地组织类的结构.确定类之间的关系,在已有类的基础上开发新的类.继承机制在程序代码复用.提高软件开发效率.降低软件系统维护成本等方面具有重要作用.