java的类是属于单继承的。在继承这一块上我本来有一个很大的误区,就是觉得父类中private定义的成员无法被继承。直到网上的大神给我指出private是可以被继承的,会在内存中,只是在子类的对象中不能被访问到。

下面以一个例子来讲讲我对继承的一些理解。

package 继承;

public class Animal {

// 属性姓名
private String name;
// 属性年龄
private int age;
public Animal(){
System.out.println("无参构造函数测试是哪个对象"+this.getClass());
System.out.println("无参父类构造方法");
}
public Animal(String name,int age){

System.out.println("有参构造函数测试是哪个对象"+this.getClass()); //cat对象
this.say(); //调用子类自己的方法。

System.out.println("有参父类构造方法");
this.name=name;
this.age=age; //在这边的this应该会自己转成子类对象的父类对象部分。
}


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;

}

// 方法say
public void say(){
System.out.println("姓名是="+name);
System.out.println("我是一个动物,我叫:"+this.getName()+"我的年龄是:"+this.getAge());
}
public static void main(String[] args) {
System.out.println(111);
}

}

定义了一个类Animal,他有私有成员name跟age,通常父类的私有成员在子类中是不能被访问到的,因此父类中经常用getXXX()和setxxx()方法来对父类的私有成员进行访问控制。

package 继承;

public class Dog extends Animal{

public static void main(String[] args) {
//设置了父类的私有数据成员
Dog dog=new Dog();
dog.setName("Pick");
dog.setAge(1);
dog.say();
System.out.println(dog.getName()); //获得的是父类的。

}
}

执行结果:

以上代码建立了一个继承于父类Animal的子类Dog。当执行Dog dog=new Dog();这句话的时候,其实构造函数是按照以下顺序进行的。

(1)执行父类无参的构造函数

(2)执行子类的默认构造函数,在这边就是什么都不执行。

以上过程可以看做是实例化父类对象跟实例化子类对象。

因为Animal的name跟Age都是用private修饰的,子类无法直接访问赋值,所以通过dog.setName("Pick");
dog.setAge(1);这两个方法去赋值。值得注意的是这两个变量是父类的成员变量,如果用dog.name是会报错的。不过用dog.getname()可以访问到被设置的name的值。在这边我也是想了很久,刚开始一直认为这个设置的name值应该是属于子类的,毕竟是用子类对象去设置的,后面也是纠结了很久才相同,你子类对象根本就访问不到name跟Age,之所以在new子类对象时会先去执行父类的构造函数也就是为了对父类的成员变量赋值。用子类调用的setXXX()跟getXXX()都是为了对父类的private属性进行初始化操作。特别的用this.setxxx()跟this.getXXX().

此外,还有一点需要说明,在父类的构造函数中,若是使用this,例如this.name,其实这边的this指的是子类,this指代的是当前对象,而这边又是有子类new出来的。可能有的又会说那为什么在这边可以使用this.name而不会报错。其实这个我也不是很理解,大概这边的范围已经在父类中了吧,而且这边操作的也是父类的成员。

纯个人理解,希望有错的能有人帮我指出,自学难,但不放弃。

个人理解java的继承的更多相关文章

  1. java提高篇(二)-----理解java的三大特性之继承

    在<Think in java>中有这样一句话:复用代码是Java众多引人注目的功能之一.但要想成为极具革命性的语言,仅仅能够复制代码并对加以改变是不够的,它还必须能够做更多的事情.在这句 ...

  2. 深入理解Java中的继承

    对于面向对象的程序设计而言,每一个程序员都应该去了解Java中的封装,继承和多态,那么我今天来说的主要是以继承为核心的主题. 一.关于对继承的理解. 继承是面向对象的三大特性之一,是java中实现代码 ...

  3. java提高篇(二)-----理解java的三大特性之继承

    在<Think in java>中有这样一句话:复用代码是Java众多引人注目的功能之一.但要想成为极具革命性的语言,仅仅能够复制代码并对加以改变是不够的,它还必须能够做更多的事情.在这句 ...

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

    在<Think in java>中有这样一句话:复用代码是Java众多引人注目的功能之一.但要想成为极具革命性的语言,仅仅能够复制代码并对加以改变是不够的,它还必须能够做更多的事情.在这句 ...

  5. java四大特性理解(封装继承多态抽象)

    封装: 封装是把过程和数据包围起来,对数据的访问只能通过已定义的接口.面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治.封装的对象,这些对象通过一个受保护的接口访问其他对象.封装是一 ...

  6. Java提高篇之理解java的三大特性——继承

    在<Think in java>中有这样一句话:复用代码是Java众多引人注目的功能之一.但要想成为极具革命性的语言,仅仅能够复制代码并对加以改变是不够的,它还必须能够做更多的事情.在这句 ...

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

    [转]java提高篇(二)-----理解java的三大特性之继承 原文地址:http://www.cnblogs.com/chenssy/p/3354884.html 在<Think in ja ...

  8. 深入理解Java 8 Lambda(语言篇——lambda,方法引用,目标类型和默认方法)

    作者:Lucida 微博:@peng_gong 豆瓣:@figure9 原文链接:http://zh.lucida.me/blog/java-8-lambdas-insideout-language- ...

  9. java笔记--理解java类加载器以及ClassLoader类

    类加载器概述: java类的加载是由虚拟机来完成的,虚拟机把描述类的Class文件加载到内存,并对数据进行校验,解析和初始化,最终形成能被java虚拟机直接使用的java类型,这就是虚拟机的类加载机制 ...

随机推荐

  1. java获得汉语首字母

    package org.scbit.lsbi.scp.utils; import net.sourceforge.pinyin4j.PinyinHelper; import net.sourcefor ...

  2. SQL Server 2008登录错误:无法连接到(local)解决方法

    在一些朋友安装完SQL Server 2008之后大多会遇到连接出错的问题比如:SQL Server 2008登录错误:无法连接到(local)等等相关问题,本文将详细介绍解决方法,需要的朋友可以参考 ...

  3. css div上下左右居中

    相信大家都会遇到这样的问题,要求一个块上下左右居中,在这里我总结了几个好用的方法 1.已知要居中的块width height 假设  content 要在f里上下左右居中 <div class= ...

  4. js未定义判断

    if (typeof(homeType) == 'undefined') { //..... //..... } typeof函数判断,如果未定义的就会返回undefined,注意undefined ...

  5. <select> 默认选中

    不多bb,直接上代码 html代码: <li><span>所属类别</span> <select id="cate" name=" ...

  6. Something about pip in Python

    学习python爬虫框架scrapy的时候,用到pip管理工具来安装scrapy.最直观的感受,pip有点类似于Ubuntu下的apt-get工具,几行代码,自动下载.安装相关的东西.网上查了一些背景 ...

  7. 3D场景定位的一些资源

    利用多张影像对小物体进行拍摄,进而进行三维重建,是计算机视觉中的重要问题之一. 目前对此研究最全面的网站是:http://vision.middlebury.edu/mview/eval/ 目前最优秀 ...

  8. 【转载】科研ppt制作的体会

    转载自实验室陈家雷学长发在bbs 上的帖子,讲解了自己制作ppt的心得体会.学习下. 附件中是我昨天晚上我的组会ppt的pdf版本,另外我对ppt的制作有点自己的理解,基本上都是去年暑假在Harvar ...

  9. PDO连接数据库

    PDO连接数据库 PDO简介和配置 php.ini extension=php_pdo.dll extension=php_pdo_myysql.dll PDO连接MYSQL new PDO(&quo ...

  10. CodeForces 515A

    A. Drazil and Date time limit per test 1 second memory limit per test 256 megabytes input standard i ...