java 子类继承父类 -- 重写、覆盖
class Foo {
public int a;
public static final String str = "foo";
public Foo() {
a = 3;
}
public int addFive() {
a = a + 5;
return a;
}
public int addFiveByGetA() {
a = getA() + 5;
return a;
}
public int getA() {
return a;
}
public String getStr() {
return str;
}
public String addStr() {
return getStr();
}
}
public class Bar extends Foo {
public int a;
public static final String str = "bar";
public Bar() {
a = 8;
}
// public int addFive() {
// a += 5;
// return a;
// }
public int getA() {
return a;
}
public String getStr() {
return str;
}
public static void main(String[] args) {
Foo foo = new Bar();
Bar bar = new Bar();
//调用的是子类中的方法
System.out.println(foo.getA());
//调用的是子类中的方法
System.out.println(bar.getA());
//直接调用父类中的a
System.out.println("Value: " + foo.a);
//直接调用子类中的a
System.out.println("Value: " + bar.a);
//调用的是父类中的方法
System.out.println(foo.addFive());
//调用的是父类中的方法
System.out.println(bar.addFive());
//调用的是子类中的方法
System.out.println(foo.addFiveByGetA());
//调用的是子类中的方法
System.out.println(bar.addFiveByGetA());
//直接调用父类中的str
System.out.println("str: " + foo.str);
//直接调用子类中的str
System.out.println("str: " + bar.str);
//调用的是父类中的方法
System.out.println(bar.getStr());
}
}
运行结果:
8
8
Value: 3
Value: 8
8
8
13
13
str: foo
str: bar
bar
其实Java继承中,成员变量(包括静态变量,实例变量,常量)没有覆盖(override)一说,应该叫隐藏(hidden)。override只针对方法来说的。
当成员变量为private时,其他类不能直接访问到,只能通过非private方法 访问,因此直接按照分析方法的思路分析,如该方法是否有覆盖,该方法是否是静态方法。
当成员变量为static时,即静态变量,在类加载过程中就分配了内存,因此只与访问的变量类型有关。
只要记住:一个男人肯定也是人,一个人却不一定是男人的道理,就非常容易理解父类和子类之间的转换关系了。
java 子类继承父类 -- 重写、覆盖的更多相关文章
- java子类继承父类的方法(代码简略版)
父类:public class Subjects { public void b() { System.out.println("学科"); } public void a(){ ...
- c++子类继承父类的覆盖问题
废话少说,先看一段代码! #include <iostream> #include <string> using namespace std; class A { public ...
- Java子类继承父类的执行顺序
父类的静态代码块(static) 子类的静态代码块(static) 父类的非静态代码块(父类成员初始化) 父类的构造方法 子类的非静态代码块(子类成员初始化) 子类的构造方法
- Java子类对于父类中static方法的继承
今天看到了Java中子类继承父类的一个相关讨论,在网上综合了各家的观点,写下了一篇简短的总结. 问题如下,在父类中含有staic修饰的静态方法,那么子类在继承父类以后可不可以重写父类中的静态方法呢? ...
- java中子类继承父类程序执行顺序
java中子类继承父类程序执行顺序 FatherTest.java public class FatherTest { private String name; public FatherTest() ...
- (转载) Java子类与父类之间的对象转换
在使用Java的多态机制时,常常使用的一个特性便是子类和父类之间的对象转换.从子类向父类的转换称为向上转换(upcasting),通过向上转换,我们能够在编写程序时采用通用程序设计的思想,在需要使用子 ...
- Java子类与父类之间的类型转换
1.向上转换 父类的引用变量指向子类变量时,子类对象向父类对象向上转换.从子类向父类的转换不需要什么限制,只需直接蒋子类实例赋值给父类变量即可,这也是Java中多态的实现机制. 2.向下转换 在父类变 ...
- @Inherited:允许子类继承父类的注解。
在看定义注解的相关文章的时候,看到这个@Inherited注解,简单的说明并没有真正搞懂是什么意思.在网上搜索了一些相关的内容,现在把一篇文章转载过来.以便后面使用. 文章出处,转载地址:(http: ...
- python 子类继承父类__init__(转载)
转载: http://www.jb51.net/article/100195.htm 前言 使用Python写过面向对象的代码的同学,可能对 __init__ 方法已经非常熟悉了,__init__方法 ...
- python之子类继承父类时进行初始化的一些问题
直接看代码: class Person: def __init__(self): self.name = "jack" class Student(Person): def __i ...
随机推荐
- 为什么C++ 单例局部static初始化是线程安全的?
为什么C++ 单例局部static初始化是线程安全的? const bg::AppSettings& bg::AppSettings::GetInstance() { static AppSe ...
- MMDetection
安装了mmdetection,想跑一下有几篇文章的工作.总觉得发展很快,一转眼几年时间,好多东西都变了.可再仔细看,感觉又没变啥,还是faster rcnn, ssd, yolo等,这几年变化的主要是 ...
- CSS – Width & Height Auto and Percentage
前言 这个非常基础, 我在学 W3Schools 之前就已经会了, 所以之前一直没用记入起来. 但偶尔遇到一些场景时还是会被坑到. 所以特别写这一篇, 提升记忆. width / height aut ...
- JavaScript 学习路线图
基础阶段 主要内容: 掌握 JavaScript 的基本语法,如变量.数据类型(字符串.数字.布尔.对象.数组等).运算符等. 理解程序的控制流,包括条件语句(如 if-else).循环语句(如 fo ...
- [OI] Testlib
Testlib 是用于实现 SpecialJudge 的一种方式 为了使用 Testlib,你需要在你的文件中引用 Testlib.h testlib.h 下载 使用 Testlib 程序 以 Tes ...
- Android MTP流程
概要 本文的目的是介绍Android系统中MTP的一些相关知识.主要的内容包括:第1部分 MTP简介 对Mtp协议进行简单的介绍.第2部分 MTP框架 介绍Android系统下MTP的框架.第3部分 ...
- C++第七节课 new开辟空间 delete释放空间
#include <iostream> using namespace std; // C中开辟空间的方式 所有的返回值 都是 void * /// int * p = (int*)mal ...
- signalR的身份认证
- 手动检查 token 是否过期
1.在 存储 token 的时候说明登录了 此时 把时间戳记录一下 js-cookies - auth.js // 导入 js-cookie 用于操作 cookies import Cookies ...
- nvm安装使用教程
一.简介 既然你来了,那就不用解释太多,只需要知道 nvm是一款nodejs版本管理工具,通过它可以让我们切换不同版本的 nodejs. 二.下载nvm 1.在安装nvm之前,你要先确定是否安装了no ...