java继承覆盖与向上转型,权限
子类可以覆盖父类的非final成员变量和重写非final方法
private私有变量和方法只能在类的内部使用,因此子类继承的同时会被隐藏,相当于不继承
protected变量,子类可以继承调用
方法被覆盖,方法中的成员变量来自子类,上转型对象只能调用自己被覆盖的方法,该方法中可以调用子类的属性
属性:私有属性无法访问,其他属性来自自身,上转型对象的属性来自本身而不是子类,上转型对象不能访问子类的新属性
package com.test.java.classs; /**
* Created by Administrator on 2015/12/7.
* 练习测试继承
* Java中子类能够继承父类的private属性或方法吗?
书中看到:
子类继承父类,子类拥有了父类的所有属性和方法。
程序验证,父类的私有属性和方法子类是无法直接访问的。当然私有属性可以通过public修饰的getter和setter方法访问到的,但是私有方法不行。
假设:子类不能够继承父类的私有属性和方法
那么:分析内存后,会发现,当一个子类被实例化的时候,默认会先调用父类的构造方法对父类进行初始化,即在内存中创建一个父类对象,然后再父类对象的外部放上子类独有的属性,两者合起来成为一个子类的对象。
所以:子类继承了父类的所有属性和方法或子类拥有父类的所有属性和方法是对的,只不过父类的私有属性和方法,子类是无法直接访问到的。即只是拥有,但是无法使用。
*/
public class Parent { public String a="p-a";
/**同一个包可以,子类可以,非子类不同包不可以**/
protected String b = "p-b";
/**同一个包可以使用,同包的子类可以,不同包的子类不可以**/
String d = "p-d";
/**只有类内部调用,外部不可以**/
private String c = "p-c"; public void publicFunc(){
System.out.println("this is parent pubFun ");
} protected void protectFunc(){
System.out.println("this is parent proFun");
} void friendFunc(){
System.out.println("this is parent friFun");
} private void privateFun(){
System.out.println("this is parent priFun");
} /**
* 获取自身属性
*/
public void getFiled(){
System.out.print(a+" ");
System.out.print(b+" ");
System.out.print(d+" ");
System.out.println(c+" ");
} } class Children extends Parent{ public String a="c-a";
/**同一个包可以,子类可以,非子类不同包不可以**/
protected String b = "c-b";
/**同一个包可以使用,同包的子类可以,不同包的子类不可以**/
String d = "c-d";
/**只有类内部调用,外部不可以
* 父类的private的属性会被隐藏,所以这里不是重写覆盖,而是子类自己的属性。
*/
private String c = "c-c"; public String newf = "c-f"; /**
* 获取自身属性
*/
public void getFiled(){
System.out.print(a+" ");
System.out.print(b+" ");
System.out.print(this.d+" ");
System.out.print(c+" ");
System.out.println(newf+" ");
} /**
* 子类自己的方法
*/
public void newFun(){
System.out.println("child self new function");
} } class Testpc{
public static void main(String[] args) {
Children c = new Children();
Parent p = new Children();
Parent parent = new Parent();
//通过上转型对象,父类只可以调用自己被覆盖的属性,私有属性不能被覆盖,上转型对象也就无法调用
// System.out.println(p.c);
//父类对象在父类内部可以调用私有属性,但在其他类中不可以,也就是说私有只能在本类的中使用
// System.out.println(parent.c);
System.out.println("=========方法被覆盖,方法中的成员变量来自子类,上转型对象只能调用自己被覆盖的方法,该方法中可以调用子类的属性===========");
System.out.println("子类");
c.getFiled();
System.out.println("上转型父类");
p.getFiled();
System.out.println("父类");
parent.getFiled(); System.out.println("=========属性:私有属性无法访问,其他属性来自自身,上转型对象的属性来自本身而不是子类,上转型对象不能访问子类的新属性===============");
System.out.println(c.a+" "+c.b+" "+c.d+" "+c.newf);
System.out.println(p.a+" "+p.b+" "+p.d);
}
}
结果:
=========方法被覆盖,方法中的成员变量来自子类,上转型对象只能调用自己被覆盖的方法,该方法中可以调用子类的属性===========
子类
c-a c-b c-d c-c c-f
上转型父类
c-a c-b c-d c-c c-f
父类
p-a p-b p-d p-c
=========属性:私有属性无法访问,其他属性来自自身,上转型对象的属性来自本身而不是子类,上转型对象不能方法子类的新属性===============
c-a c-b c-d c-f
p-a p-b p-d
java继承覆盖与向上转型,权限的更多相关文章
- 转载 - java中接口的向上转型。和多态性
发现一篇对接口总结很精简的文章 1.在java中接口就是一个完全抽象的类,跟抽象类一样不能产生对象,但是可以作为对象的引用,可以由其实现类向上转型,它就跟超类一样, 向上转型了,可以很好的利用接口,可 ...
- java继承覆盖总结
Java基础(1) 版权声明:本文为博主原创文章,未经博主允许不得转载. java的继承与覆盖基本是java笔试中常出的题,也比较绕,我这里对java的继承覆盖做一个总结1.构造函数: ...
- java基础(十)之向上转型/向下转型
向上转型:将子类的对象赋值给父类的引用. 向下转型:将父类的对象赋值给子类的引用. 向上转型 Student a = new Student(); Person zhang = a; 或者 Perso ...
- Java继承--覆盖
java中支持单继承.不直接支持多继承,但对C++中的多继承机制进行改良. 单继承:一个子类只能有一个直接父类. 多继承:一个子类可以有多个直接父类(java中不允许,进行改良).不直接支持,因为多个 ...
- Java:多态(向上转型)
先来看一段代码: class BaseClass{ public int book = 6; public void base(){ System. ...
- java基本数据类型转换之向上转型和向下转换
向上转换: 整型,字符型,浮点型的数据在混合运算中相互转换,转换时遵循以下原则: 容量小的类型可自动转换为容量大的数据类型: byte,short,char → int → long → float ...
- java的向上转型总结
在<think of java>中对'向上转型'有着如下的描述 看完之后很蒙圈,所以自己在网上找了一些描述,并自己做了简单的总结 简单的例子 class A{ public void A1 ...
- 一道Java程序输出题(继承-重载-覆盖-向上转型的问题)
class A { public String show(D obj) { // func1 return ("A and D"); } public String show(A ...
- C++ (P160—)多继承 二义性 虚基类 “向上转型”
1 多继承中,必须给每个基类指定一种派生类型,如果缺省,相应的基类则取私有派生类型,而不是和前一个基类取相同的派生类型 2 一个类的保护成员只能被本类的成员函数或者它的派生类成员函数访问 3 由于c+ ...
随机推荐
- Web性能优化:What? Why? How?
为什么要提升web性能? Web性能黄金准则:只有10%~20%的最终用户响应时间花在了下载html文档上,其余的80%~90%时间花在了下载页面组件上. web性能对于用户体验有及其重要的影响,根据 ...
- 执行 $Gulp 时发生了什么 —— 基于 Gulp 的前端集成解决方案(二)
前言 文章 在windows下安装gulp —— 基于 Gulp 的前端集成解决方案(一) 中,已经完成对 gulp 的安装,由于是window环境,文中特意提到了可以通过安装 gitbash 来代替 ...
- 小兔Java教程 - 三分钟学会Java文件上传
今天群里正好有人问起了Java文件上传的事情,本来这是Java里面的知识点,而我目前最主要的精力还是放在了JS的部分.不过反正也不麻烦,我就专门开一贴来聊聊Java文件上传的基本实现方法吧. 话不多说 ...
- Javascript 严格模式详解
转自http://www.ruanyifeng.com/blog/2013/01/javascript_strict_mode.html 一.概述 除了正常运行模式,ECMAscript 5添加了第二 ...
- 编译器开发系列--Ocelot语言1.抽象语法树
从今天开始研究开发自己的编程语言Ocelot,从<自制编译器>出发,然后再自己不断完善功能并优化. 编译器前端简单,就不深入研究了,直接用现成的一款工具叫JavaCC,它可以生成抽象语法树 ...
- Android种使用Notification实现通知管理以及自定义通知栏(Notification示例四)
示例一:实现通知栏管理 当针对相同类型的事件多次发出通知,作为开发者,应该避免使用全新的通知,这时就应该考虑更新之前通知栏的一些值来达到提醒用户的目的.例如我们手机的短信系统,当不断有新消息传来时,我 ...
- 【转】 XenServer的架构
一.Dom0或者控制域 XenServer从安装上看起来像是一个Linux,所以有些同学认为XenServer就是Linux或者是Linux修改的.真实的XenServer和Linux的关系是这样的: ...
- mono for android学习过程系列教程(4)
今天要讲的事情是构建安卓程序的UI界面. 首先给大家上点小点心,如图: 上面就是我们界面的设计模块,仔细看中间大块的下方,有一个Source,这就类似webform里面的设计和源代码界面. 在这个页面 ...
- ASP.NET 5 改名 ASP.NET Core 1.0
今天,Scott Hanselman在其博客上宣布<ASP.NET 5 is dead - Introducing ASP.NET Core 1.0 and .NET Core 1.0>, ...
- 安全防范:nginx下git引发的隐私泄露问题
安全防范:nginx下git引发的隐私泄露问题 1 安全事件 最近阿里云服务器后台管理系统中收到一条安全提示消息,系统配置信息泄露: http://my.domain.com/.git/confi ...