关于java中的继承
我们都知道Java中的继承是复用代码、扩展子类的一种方式,继承使得Java中重复的代码能够被提取出来供子类共用,对于Java程序的性能以及修改和扩展有很大的意义,所以这是一个非常重要的知识点。
那么对于继承的知识点,你真的都了解了吗?
首先,我们都知道子类继承父类,就能直接访问父类的公共属性以及受保护属性(public和protected),同时也能直接访问父类的公共方法以及受保护方法;其次,对于父类的私有属性,子类并不能直接访问,但是可以通过父类提供的getter和setter方法进行访问,而父类的私有方法,子类无法直接访问;还有,对于父类的包访问权限属性和方法(default),如果子类和父类在同一个包下,子类可以继承并且直接访问到,如果二者不在同一个包下,则子类无法直接访问到这些方法和属性,但是同样的可以通过父类的getter和setter方法去访问这些属性;最后一点,我们很多人其实都有疑问,子类继承父类,不是应该继承了父类的所有东西吗,为什么访问不到那些私有属性?其实这里要从内存分析来看,当我们要创建一个子类的对象时,Java虚拟机会先帮我们生成对应的父类对象,因为我们都知道,在子类的构造方法中中,首行代码必须是父类构造方法的调用,即通过super关键字来调用,如果不写,则虚拟机会自动帮我们加入super()(前提是父类有无参构造方法),如果父类没有无参构造方法而有有参构造方法,那么子类的构造方法必须显性的调用父类的构造方法,否则会报错。通过这一点我们就知道在创建子类对象的时候,Java虚拟机是先创建父类的对象,然后在这个父类对象的基础上加上子类特有的方法和属性,从而创建出子类对象,因此从这里我们可以得知,子类是拥有父类的所有属性和方法的,但是拥有不代表能够访问!!!父类私有的方法和对象是子类无法直接访问的,子类仅仅是拥有但访问不到!
这里补充一下特殊的情况,就是父类中的final属性和方法以及static属性和方法子类是能够继承并直接访问的,但是final的属性子类无法修改,final的方法子类无法重写,说明final修饰的方法并不具备动态绑定;而static的属性和方法会存在隐藏现象,即当子类中出现与父类static变量或者方法同名的变量或者方法时,子类的成员变量和静态方法会被隐藏,如:父类中有public static int nun = 1,而子类中有public static int num = 2,这时候用向上转型的对象(比如Father father = new Son(),其中Father是父类,Son是子类)去输出num属性会发现输出为1!static方法的隐藏理论同属性一致。如果你想调用子类的static方法和属性,你需要定义明确子类(如Son son = new Son())的对象去调用,从这里看出static方法和属性也不支持动态绑定!所以子类并不能重写父类的static方法。
以上是我个人对Java继承一些见解,如果有补充或者修改的地方请在评论区指出来,谢谢!
知识点扩展:Java中的动态绑定,是实现多态的本质,它只针对普通方法,而且仅仅是方法,不包括成员变量那些!所以说如果你用一个向上转型的父类对象去调用父类对象中的非final、非static属性,即使它对应的子类中有一样的属性,最终输出还是父类对象的属性!最后补充一点,Java中除了final、static、private修饰的方法以及构造器(构造器默认为static)为静态绑定之外,其他方法皆为动态绑定。
关于java中的继承的更多相关文章
- 关于Java中的继承和组合的一个错误使用的例子
[TOC] 关于Java中的继承和组合的一个错误使用的例子 相信绝大多数人都比较熟悉Java中的「继承」和「组合」这两个东西,本篇文章就主要就这两个话题谈论一下.如果我某些地方写的不对,或者比较幼稚, ...
- java中的继承与oc中的继承的区别
为什么要使用继承? 继承的好处: (1)抽取出了重复的代码,使代码更加灵活 (2)建立了类和类之间的联系 继承的缺点: 耦合性太强 OC中的继承 1.OC中不允许子类和父类拥有相同名称的成员变量名:( ...
- <Java中的继承和组合之间的联系和区别>
//Java中的继承和组合之间的联系和区别 //本例是继承 class Animal { private void beat() { System.out.println("心胀跳动...& ...
- Java中的继承
我们在以前的学习中,我们会了C#中的继承,今天我们来了解了解Java中的继承,其实都大同小异啦! 1.语法 修饰符 SubClass extends SuperClass(){ //类定义部分 } e ...
- extends:类似于java中的继承特征,extends="struts-default"
extends:类似于java中的继承特征,extends="struts-default"就是继承struts-default.xml,它里面定义了许多跳转类型.拦截器等一些常用 ...
- Java中的继承、封装、多态的理解
Java中的继承.封装.多态 继承的理解: 1.继承是面向对象的三大特征之一,也是实现代码复用的重要手段.Java的继承具有单继承的特点,每个子类只有一个直接父类. 2.Java的继承通过extend ...
- 浅析 Java 中的继承和重写
浅析 Java 中的继承和重写 Java 中的构造方法不能被继承. Java 中 static 修饰的方法可以被继承,但不能被子类重写. Java 中 final 修饰方法不允许被子类重写,但是可以被 ...
- java中的继承关系
1.定义 java中的继承是单一的,一个子类只能拥有一个父类:java中所有类的父类是java.lang.Object,除了这个类之外,每个类只能有一个父类: 而一个父类可以有多个子类,可以被多个子类 ...
- java中子类继承父类程序执行顺序
java中子类继承父类程序执行顺序 FatherTest.java public class FatherTest { private String name; public FatherTest() ...
随机推荐
- Monitor和Lock以及区别
1.Monitor.Enter(object)方法是获取锁,Monitor.Exit(object)方法是释放锁,这就是Monitor最常用的两个方法,当然在使用过程中为了避免获取锁之后因为异常,致锁 ...
- Java和JS MD5加密-附盐值加密demo
JAVA和JS的MD5加密 经过测试:字母和数据好使,中文不好使. 源码如下: ** * 类MD5Util.java的实现描述: * */public class MD5Util { // 获得MD5 ...
- [Cypress] Stub a Post Request for Successful Form Submission with Cypress
In this lesson well stub a POST request and use Cypress commands to fill in and submit a form. We’ll ...
- 查询结果多个合并一个GROUP_CONCAT(EmployeeName)
一个课程多个教师,查询结果单条显示,其中课程与教师关系是一一对应存入表中
- CSS3动画遮罩文字特效
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...
- oc27--synthesize,省略getset实现
// // Person.h #import <Foundation/Foundation.h> @interface Person : NSObject { @public int _a ...
- Single document interface和Multiple document interface
https://en.wikipedia.org/wiki/Single_document_interface https://msdn.microsoft.com/en-us/library/b2k ...
- Android定时任务
前言 我们在平常的开发中可能会遇到一些需求,比如说,每日定时提醒,定时更新数据等等,反正就是周期性任务,碰到这类需求,我们就可以叫做定时任务.以前我们可以通过使用线程Handler来实现,现在既然是在 ...
- 【POJ 2230】 Watchcow
[题目链接] http://poj.org/problem?id=2230 [算法] 欧拉回路 [代码] #include <algorithm> #include <bitset& ...
- HTTP权威协议笔记-10.HTTP-NG
1.HTTP发展中存在的问题 复杂性 其连接.报文.及功能逻辑之间的混合使用相当复杂,使用容易出错 可扩展性 传统流行下来的http应用很难实现扩展性,且无法兼容 性能 高延时.低吞吐 ...