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+ ...
随机推荐
- 记一个mvn奇怪错误: Archive for required library: 'D:/mvn/repos/junit/junit/3.8.1/junit-3.8.1.jar' in project 'xxx' cannot be read or is not a valid ZIP file
我的maven 项目有一个红色感叹号, 而且Problems 存在 errors : Description Resource Path Location Type Archive for requi ...
- 散列表(hash table)——算法导论(13)
1. 引言 许多应用都需要动态集合结构,它至少需要支持Insert,search和delete字典操作.散列表(hash table)是实现字典操作的一种有效的数据结构. 2. 直接寻址表 在介绍散列 ...
- webapp应用--模拟电子书翻页效果
前言: 现在移动互联网发展火热,手机上网的用户越来越多,甚至大有超过pc访问的趋势.所以,用web程序做出仿原生效果的移动应用,也变得越来越流行了.这种程序也就是我们常说的单页应用程序,它也有一个英文 ...
- Android -- 真正的 高仿微信 打开网页的进度条效果
(本博客为原创,http://www.cnblogs.com/linguanh/) 目录: 一,为什么说是真正的高仿? 二,为什么要搞缓慢效果? 三,我的实现思路 四,代码,内含注释 五,使用方法与截 ...
- ASP.NET MVC一次删除多笔记录
批量删除数据记录,如下面的截屏: 先选中想删除的记录,然后点一下删除铵钮,系统将把选中的记录一次性删除.在此,Insus.NET不想每删除一笔记录连接一次数据库. 因此需要把选择的记录一次上传至服务器 ...
- python中IndentationError: expected an indented block错误的解决方法
IndentationError: expected an indented block 翻译为IndentationError:预期的缩进块 解决方法:有冒号的下一行要缩进,该缩进就缩进
- 【干货分享】流程DEMO-采购预算编制
流程名: 采购预算编制 业务描述: 在月初由计财部进行预算编辑,提交审批后预算生效 流程相关文件: 流程包.xml WebService业务服务.xml WebService.asmx WebSe ...
- 开源 iOS 项目分类索引大全 - 待整理
开源 iOS 项目分类索引大全 GitHub 上大概600个开源 iOS 项目的分类和介绍,对于你挑选和使用开源项目应该有帮助 系统基础库 Category/Util sstoolkit 一套Cate ...
- Open-Test 测试驱动模式与版本号管理机制
以测试用例驱动项目开发,coding/case俩条线并走模式. 1.开发人员只负责功能实现: 2.测试人员提供自测用例,研发人员jenkins持续集成项目后自动化执行自测用例,通过后方可转测试 ...
- 树莓派3B的食用方法-1(装系统 网线ssh连接)
首先要有一个树莓派3B , 在某宝买就行, 这东西基本上找到假货都难,另外国产和英国也没什么差别,差不多哪个便宜买哪个就行. 不要买店家的套餐,一个是配的东西有些不需要,有的质量也不好. 提示:除了G ...