Java--Inheritance constructor继承中的构造方法问题(一)
Java规定,一个父类可以同时拥有多个子类,但一个子类只能有一个父类,即单重继承,允许多层继承,即子类还可以有自己的子类,在下一层继承关系中原先的子类就变成了父类,这样的继承关系就形成了继承树。
子类继承父类中所有可能被子类访问的成员变量,原则如下:
1.能够继承那些声明为public和protected的成员变量;
2.能够继承同一包中的那些默认修饰符的成员变量;
3.不能继承那些声明为private的成员变量;
4.如果子类声明一个与父类成员变量同名的成员变量,则不能继承父类的成员变量,此时子类的成员变量称作隐藏了父类的成员变量。
对于成员方法的继承,都类似于上面的4条说法,把成员变量改成成员方法即可,此时子类的方法称为覆盖了父类中的那个方法。
5.不能继承父类的构造方法。
虽然子类不能继承父类的构造方法,但是子类对象会调用父类的构造方法的。
调用构造方法的原则如下:
1. 如果子类没有定义构造方法,则调用父类的无参数的构造方法,.
2. 如果子类定义了构造方法,不论是无参数还是带参数,在创建子类的对象的时候,首先执行父类无参数的构造方法,然后执行自己的构造方法。这句话有点不通,也不懂啥意思,试试就懂了。
3. 如果子类调用父类带参数的构造方法,可以通过super(参数)调用所需要的父类的构造方法,切该语句做为子类构造方法中的第一条语句。
4. 如果某个构造方法调用类中的其他的构造方法,则可以用this(参数),切该语句放在构造方法的第一条.
当一个类继承了某个类时,在子类的构造方法里,super()必须先被调用;如果你没有写,编译器会自动调用super()方法,即调用了父类的构造方法;
这并不是创建了两个对象,其实只有一个子类Sub对象;之所以需要调用父类的构造方法是因为在父类中,可能存在私有属性需要在其构造方法内初始化。
class Super {
String s;
public Super() {
System.out.println("Super");
}
}
class Sub extends Super {
public Sub() {
System.out.println("Sub");
}
}
public class Main {
public static void main(String[] args) {
Sub s = new Sub();
}
}
结果:
Super
Sub
class Usebefore {
String str1;
public Usebefore() {
// TODO Auto-generated constructor stub
System.out.println(".....default super constructor...1...........");
}
public Usebefore(String get1)
{
str1=get1;
System.out.println(str1);
}
public void play()
{
System.out.println("............1............");
}
}
public class Use extends Usebefore{
public Use() {
// TODO Auto-generated constructor stub
System.out.println(".....default super constructor...2...........");
}
public Use(String get2){
super(" diaoyong super constructor youcan constructor");
str1=get2;
System.out.println(str1);
}
public void play()
{
System.out.println("............2............");
}
public static void main(String args[]){
Use use=new Use();
use.play();
use=new Use("get2");
}
}
结果:
.....default super constructor...1...........调用父类无参构造函数
.....default super constructor...2...........调用子类。。
............2............。。。。。。。。。。。。覆盖父类方法
diaoyong super constructor youcan constructor。。。。。。调用父类构造方法
get2
Java--Inheritance constructor继承中的构造方法问题(一)的更多相关文章
- Java--Inheritance constructor继承中的构造方法问题(二)
看了前辈的博客,觉得这两点说的精辟:子类构造方法必须要调用父类的某个构造方法:被子类调用的父类构造方法在父类中必须是存在的. 上篇的例子有一点不明白,子类继承了父类的成员变量,父类的构造函数里引用了该 ...
- java之继承中的构造方法
继承中的构造方法 1.子类的构造过程中必须调用其基类的构造方法. 2.子类可以在自己的构造方法中使用super(argument_list)调用基类的构造方法. 2.1.使用this(argumen ...
- java学习笔记-继承中super关键字
背景: 在java继承的概念中我们得知,被声明为私有的类成员对所属的类来说仍然是私有的.类之外的任何代码都不能访问,包括子类. super关键字的两种用法: 1.用于调用超类的构造函数: 2.用于访问 ...
- Java学习之继承中的执行顺序详解
代码块(理解) (1)用{}括起来的代码. (2)分类: A:局部代码块 用于限定变量的生命周期,及早释放,提高内存利用率. B:构造代码块 把多个构造方法中相同的代码可以放到这里,每个构造方法执行前 ...
- Java 构造器Constructor 继承
Java默认构造方法 构造方法作用:初始化所定义的类的对象和属性. 构造方法没有返回类型. 2 继承中的构造器 子类是不继承父类的构造器(构造方法或者构造函数)的,它只是调用(隐式或显式). 如果父类 ...
- 【Java基础】继承中的代码块和构造方法的执行顺序探索
本文讲述有关一个类的静态代码块,构造代码块,构造方法的执行流程问题.首先来看一个例子 /** * Created by lili on 15/10/19. */ class Person{ stati ...
- JAVA基础--继承中的构造方法
1. 子类的构造方法必须调用父类的构造方法 2. 子类在自己的构造方法中使用super(argument_list)调用父类的构造方法, 使用this(argument_list)调用自己的其他的构造 ...
- Java学习笔记之Java 继承中的构造方法
参考
- Java 基础:继承中的执行顺序
1.单独的父类测试 Java中,new一个类的对象,类里面的静态代码块.非静态代码.无参构造方法.有参构造方法.类的一般方法等部分, 它们的执行顺序相对来说比较简单,用程序也很容易验证. 比如新建一个 ...
随机推荐
- Unity Lighting - Light Probes 光照探针(十)
Light Probes 光照探针 Only static objects are considered by Unity’s Baked or Precomputed Realtime GI s ...
- PHP自定义生成二维码跳转地址
比较简单的一款PHP自定义生成二维码跳转地址,手机端微信扫码,自动跳转到定义好的链接.支持自定义生成二维码尺寸.间距等. 鼠标悬浮显示二维码弹出层,离开后消失.js实现,代码如下: $(fu ...
- Spring学习(3):Spring概述(转载)
1. Spring是什么? Spring是一个开源的轻量级Java SE(Java 标准版本)/Java EE(Java 企业版本)开发应用框架,其目的是用于简化企业级应用程序开发. 在面向对象思想中 ...
- nginx 日志模块
ngx_http_log_module.c 数据结构 typedef struct { void **main_conf; void **srv_conf; void **loc_conf;} ngx ...
- Kafka安装之三 spring-kafka实践
一.spring-kafka配置详解 1.1 要是用spring-kafka 我们首先要在pom要.xml中引入spring-kafka包 <dependencies> <depen ...
- Beta发布—美工+文案
此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2408 视频展示地址:https://www.bilibili.com/v ...
- 404 Note Found队——现场编程
目录 组员职责分工 github 的提交日志截图 程序运行截图 程序运行环境 GUI界面 基础功能实现 运行视频 LCG算法 过滤(降权)算法 算法思路 红黑树 附加功能一 背景 实现 附加功能二(迭 ...
- HDU 5391Z ball in Tina Town 数论
题目链接: hdu:http://acm.hdu.edu.cn/showproblem.php?pid=5391 bc: http://bestcoder.hdu.edu.cn/contests/c ...
- Java中的断言assert
Java陷阱之assert关键字 一.概述 在C和C++语言中都有assert关键,表示断言. 在Java中,同样也有assert关键字,表示断言,用法和含义都差不多. 二.语法 在J ...
- 领悟JavaScript面向对象
JavaScript 是面向对象的.但是不少人对这一点理解得并不全面. 在 JavaScript 中,对象分为两种.一种可以称为“普通对象”,就是我们所普遍理解的那些:数字.日期.用户自定义的对象(如 ...