Java覆盖和隐藏

  • (1) 变量只能被隐藏(包括静态和非静态),不能被覆盖;
  • (2) 可以用子类的静态变量隐藏父类的静态变量,也可以用子类的非静态变量隐藏父类的静态变量,也可以用非最终变量(final)隐藏父类中的最终变量;
  • (3) 静态属性(static)和静态方法(static)可以被继承,但是不能被重写、被覆盖(@Override)而是被隐藏;
  • (4) 非静态方法可以被覆盖;
  • (5) 不能用子类的静态方法隐藏父类中的非静态方法,否则编译会报错;
  • (6) 不能用子类的非静态方法覆盖父类的静态方法,否则编译会报错;
  • (7) 不能重写父类中的最终方法(final);
  • (8) 抽象方法必须在具体类中被覆盖;
  • (9) 静态方法和实例方法不能互相覆盖;

Java里用final修饰的成员和成员变量能否被继承

  • (1) final修饰的成员和成员变量,可以被继承。
  • (2) final修饰的方法可以被继承不能被重写。
  • (3) final修饰的类,不能被继承。

/*** Cat class* Java 中实例方法被覆盖,静态方法被隐藏** @author libin* @date 2019/1/28 17:05*/
class Animal {public static void testClassMethod() {System.out.println("Class" + " method in Animal.");}public void testInstanceMethod() {System.out.println("Instance " + " method in Animal.");}
}public class Cat extends Animal {public static void testClassMethod() {System.out.println("The class method" + " in Cat.");}@Overridepublic void testInstanceMethod() {System.out.println("The instance method" + " in Cat.");}public static void main(String[] args) {Cat myCat = new Cat();Animal myAnimal = myCat;Animal.testClassMethod();myAnimal.testInstanceMethod();}
}

参考答案

Class method in Animal.
The instance method in Cat.

/*** Demo class** @author libin* @date 2019/1/28 16:25*/
class A {static void fun() {System.out.println("A.fun()");}
}class B extends A {static void fun() {System.out.println("B.fun()");}
}public class Demo {public static void main(String args[]) {A a = new B();a.fun();}
}

参考答案

A.fun()

/*** Son class** @author libin* @date 2019/1/29 10:25*/class Dad {protected static String me = "dad";public void printMe() {System.out.println(me);}
}public class Son extends Dad {protected static String me = "son";@Overridepublic void printMe() {System.out.println(me);}public static void main(String[] args) {Dad dad = new Son();Son son = new Son();System.out.println("son.me:" + son.me);System.out.println("dad.me:" + dad.me);System.out.println("Son.me:" + Son.me);System.out.println("Dad.me:" + Dad.me);son.printMe();dad.printMe();}
}

参考答案

son.me:son
dad.me:dad
Son.me:son
Dad.me:dad
son
son

反编译Class代码

class Dad
{protected static String me;public void printMe() {System.out.println(Dad.me);}static {Dad.me = "dad";}
}public class Son extends Dad
{protected static String me;@Overridepublic void printMe() {System.out.println(Son.me);}public static void main(final String[] args) {final Dad dad = new Son();final Son son = new Son();System.out.println("son.me:" + Son.me);System.out.println("dad.me:" + Dad.me);System.out.println("Son.me:" + Son.me);System.out.println("Dad.me:" + Dad.me);son.printMe();dad.printMe();}static {Son.me = "son";}
}

参考链接

  • https://docs.oracle.com/javase/tutorial/java/IandI/override.html
  • https://www.cnblogs.com/cs1003/p/3408119.html

转载于:https://www.cnblogs.com/hglibin/p/10333551.html

Java中的覆盖和隐藏以及final关键字相关推荐

  1. Java 中关于this、static、final 关键字的使用

    this关键字 this 关键字主要有以下几种作用: 1:当类成员变量与局部成员变量重名时,可以用this 关键字把局部成员变量赋值给类成员变量 2:this可以用来在构造函数中调用其他构造函数    ...

  2. java 中覆 写tostring_如何在Java中正确覆盖toString()?

    如何在Java中正确覆盖toString()? 听起来有点愚蠢,但我需要帮助我的toString()方法,这是非常irking. 我尝试在网上查找,因为toString是搞砸了,"没有找到K ...

  3. 43、在java中一个类被声明为final类型,表示了什么意思?

    43.在java中一个类被声明为final类型,表示了什么意思? 表示该类不能被继承,是顶级类. JAVA面试问题及答案大全

  4. 再谈Java中的覆盖(Overriding)与重载(Overloading)

    在 Overriding vs Overloading in Java 中,我们简单介绍了Java中的Overriding 与 Overloading ,下面我们就此话题继续探讨: 问题一:什么是静态 ...

  5. java中key的作用_key word ‘final’ 在java 中作用

    随着硬件的发展,一般的芯片不会用于裸跑,像android things 这样的系统会越来越多,在嵌入式中c++/java的应用将会越来越多.而且我感觉嵌入式工程师掌握android app的基本开发是 ...

  6. Java中String,StringBuffer都是final类

    Java中String和StringBuffer同时final类,它们的区别在哪里 ? final 表示这个类不能再被继承.String不可变是说String中用一个final 的char数组priv ...

  7. java中的标识符和关键字_浅谈java中的标识符、修饰符和关键字

    合法标识符 Java语言中,对于变量,常量,函数,语句块均有名字,我们统统称之为Java标识符.标识符是用来给类.对象.方法.变量.接口和自定义数据类型命名的. 组成:Java标识符由数字,字母和下划 ...

  8. 第三次学JAVA再学不好就吃翔(part33)--final关键字

    学习笔记,仅供参考 文章目录 面向对象 final关键字 final关键字修饰类,方法以及变量的特点 final关键字修饰局部变量 final修饰变量的初始化时机 面向对象 final关键字 fina ...

  9. java volatile lock_Java并发学习笔记 -- Java中的Lock、volatile、同步关键字

    Java并发 一.锁 1. 偏向锁 1. 思想背景 来源:HotSpot的作者经过研究发现,大多数情况下,锁不仅不存在多线程竞争,而且总是由同 一线程多次获得,为了让线程获得锁的代价更低而引入了偏向锁 ...

最新文章

  1. 物流信息管理系统MySQL设计,物流管理系统的SQL数据库设计(含代码)
  2. JavaScript数据结构——树(Tree)
  3. SQL实战之获取所有部门当前manager当前的薪水
  4. MySQL的show profile(已过时)简介以及该功能在MySQL 5.7中performance_schema中的替代
  5. Dynatable – 基于 HTML5 jQuery 的交互表格插件
  6. RouteOS 频繁自启
  7. 解决表格里面使用text-overflow后依旧不能隐藏超出的文本
  8. Cocos数据篇[3.4](3) ——XML数据操作
  9. 09、Non-Black-Box ZK(Barak‘s protocol)--Alon Rosen
  10. [技巧]深入了解强大的 ES6 「 ... 」 运算符
  11. 交互设计师到底是需要做什么?
  12. 13 标准模板库STL【C++】
  13. web前端期末大作业:基于HTML+CSS+JavaScript学校教育主题-卡通风格在线职业教育网页设计 (14页)
  14. java生成图章到word_JAVA不使用POI给Word文档添加水印
  15. iPhone SE2外观酷似iPhone 8,香吗?
  16. 理解闭包的前置条件—— λ演算和作用域规则
  17. 校招----shein一面面经
  18. 阿里云国际版CDN的优势
  19. CentOS7安装MySQL8.0和Nginx
  20. 实例5:寄存器操作学习:stc8a8k单片机硬件PWM的原理和代码讲解(置1清0位操作和高8位低8位拆分)

热门文章

  1. WPF新手实践7:MVVM Light Toolkit(七、Messenger)
  2. 微信小程序 通过云函数请求http网站接口
  3. TensorFlow ImportError: (‘Failed to import pydot. You must `pip install pydot`)
  4. Python 搜狗站长平台批量添加域名+批量提交链接 过验证码 IP限制
  5. proDAD Erazr便携版
  6. os和sys模块的常用方法
  7. ElasticSearch6 查询模板的创建使用
  8. bzoj [Scoi2016]美味
  9. ios兼容 iphoneX ios10 ios11
  10. C# SignalR 即时通讯 聊天室