java继承覆盖与向上转型,权限
时间:2022-05-04
本文章向大家介绍java继承覆盖与向上转型,权限,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
子类可以覆盖父类的非final成员变量和重写非final方法
private私有变量和方法只能在类的内部使用,因此子类继承的同时会被隐藏,相当于不继承
protected变量,子类可以继承调用
方法被覆盖,方法中的成员变量来自子类,上转型对象只能调用自己被覆盖的方法,该方法中可以调用子类的属性
属性:私有属性无法访问,其他属性来自自身,上转型对象的属性来自本身而不是子类,上转型对象不能访问子类的新属性
1 package com.test.java.classs;
2
3 /**
4 * Created by Administrator on 2015/12/7.
5 * 练习测试继承
6 * Java中子类能够继承父类的private属性或方法吗?
7 书中看到:
8 子类继承父类,子类拥有了父类的所有属性和方法。
9 程序验证,父类的私有属性和方法子类是无法直接访问的。当然私有属性可以通过public修饰的getter和setter方法访问到的,但是私有方法不行。
10 假设:子类不能够继承父类的私有属性和方法
11 那么:分析内存后,会发现,当一个子类被实例化的时候,默认会先调用父类的构造方法对父类进行初始化,即在内存中创建一个父类对象,然后再父类对象的外部放上子类独有的属性,两者合起来成为一个子类的对象。
12 所以:子类继承了父类的所有属性和方法或子类拥有父类的所有属性和方法是对的,只不过父类的私有属性和方法,子类是无法直接访问到的。即只是拥有,但是无法使用。
13 */
14 public class Parent {
15
16 public String a="p-a";
17 /**同一个包可以,子类可以,非子类不同包不可以**/
18 protected String b = "p-b";
19 /**同一个包可以使用,同包的子类可以,不同包的子类不可以**/
20 String d = "p-d";
21 /**只有类内部调用,外部不可以**/
22 private String c = "p-c";
23
24 public void publicFunc(){
25 System.out.println("this is parent pubFun ");
26 }
27
28 protected void protectFunc(){
29 System.out.println("this is parent proFun");
30 }
31
32 void friendFunc(){
33 System.out.println("this is parent friFun");
34 }
35
36 private void privateFun(){
37 System.out.println("this is parent priFun");
38 }
39
40 /**
41 * 获取自身属性
42 */
43 public void getFiled(){
44 System.out.print(a+" ");
45 System.out.print(b+" ");
46 System.out.print(d+" ");
47 System.out.println(c+" ");
48 }
49
50
51 }
52
53 class Children extends Parent{
54
55 public String a="c-a";
56 /**同一个包可以,子类可以,非子类不同包不可以**/
57 protected String b = "c-b";
58 /**同一个包可以使用,同包的子类可以,不同包的子类不可以**/
59 String d = "c-d";
60 /**只有类内部调用,外部不可以
61 * 父类的private的属性会被隐藏,所以这里不是重写覆盖,而是子类自己的属性。
62 */
63 private String c = "c-c";
64
65 public String newf = "c-f";
66
67 /**
68 * 获取自身属性
69 */
70 public void getFiled(){
71 System.out.print(a+" ");
72 System.out.print(b+" ");
73 System.out.print(this.d+" ");
74 System.out.print(c+" ");
75 System.out.println(newf+" ");
76 }
77
78 /**
79 * 子类自己的方法
80 */
81 public void newFun(){
82 System.out.println("child self new function");
83 }
84
85
86 }
87
88 class Testpc{
89 public static void main(String[] args) {
90 Children c = new Children();
91 Parent p = new Children();
92 Parent parent = new Parent();
93 //通过上转型对象,父类只可以调用自己被覆盖的属性,私有属性不能被覆盖,上转型对象也就无法调用
94 // System.out.println(p.c);
95 //父类对象在父类内部可以调用私有属性,但在其他类中不可以,也就是说私有只能在本类的中使用
96 // System.out.println(parent.c);
97 System.out.println("=========方法被覆盖,方法中的成员变量来自子类,上转型对象只能调用自己被覆盖的方法,该方法中可以调用子类的属性===========");
98 System.out.println("子类");
99 c.getFiled();
100 System.out.println("上转型父类");
101 p.getFiled();
102 System.out.println("父类");
103 parent.getFiled();
104
105 System.out.println("=========属性:私有属性无法访问,其他属性来自自身,上转型对象的属性来自本身而不是子类,上转型对象不能访问子类的新属性===============");
106 System.out.println(c.a+" "+c.b+" "+c.d+" "+c.newf);
107 System.out.println(p.a+" "+p.b+" "+p.d);
108 }
109 }
结果:
=========方法被覆盖,方法中的成员变量来自子类,上转型对象只能调用自己被覆盖的方法,该方法中可以调用子类的属性=========== 子类 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快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 终于搞懂了Keras中multiloss的对应关系介绍
- python else语句在循环中的运用详解
- python文件编写好后如何实践
- keras 指定程序在某块卡上训练实例
- Python3 requests模块如何模仿浏览器及代理
- PHP中的empty、isset、isnull的区别与使用实例
- Laravel学习笔记之Artisan命令生成自定义模板的方法
- php微信扫码支付 php公众号支付
- PHP析构函数destruct与垃圾回收机制的讲解
- 关于php unset对json_encode的影响详解
- python实现二分类和多分类的ROC曲线教程
- PHP随机数函数rand()与mt_rand()的讲解
- PHP实现小程序批量通知推送
- Keras loss函数剖析
- Laravel使用scout集成elasticsearch做全文搜索的实现方法