java constructor 在构造子类时,一定会调用到父类的构造方法 “ 私有属性被继承了?”问题
” Error:Implicit super constructor Pet() is undefined. Must explicitly invoke another constructor “
记住一点:在构造子类时,一定会调用到父类的构造方法。因为父类中的元素也需要被初始化。
所以父类要么有一个默认的无参数构造,这样Java会自动调用这个无参数的构造。如果父类没有无参数的构造,那么就要你自己在子类的构造中,通过super()的方式调用父类的构造。
参考代码如下;
- package practise02_2;
- /*
- * 子类重写父类方法
- */
- public class Pet {
- private String petName;
- private String ownerName;
- Pet(){}
- public Pet(String petName,String ownerName){
- System.out.println("wweqwq");
- this.petName=petName;
- this.ownerName=ownerName;
- }
- public void playWithOwner(){
- System.out.println(getPetName()+"正在和主人"+getOwnerName()+"玩耍");
- }
- public String getPetName() {
- return petName;
- }
- public void setPetName(String petName) {
- this.petName = petName;
- }
- public String getOwnerName() {
- return ownerName;
- }
- public void setOwnerName(String ownerName) {
- this.ownerName = ownerName;
- }
- }
- *********子类在实例化时,必须给父类变量初始化,即调用父类构造函数**********************
- package practise02_2;
- public class Cat extends Pet {
- private String petName;
- private String ownerName;
- public Cat(String petName, String ownerName) {
- // super(petName, ownerName); //注释掉会报错!为何??实例化子类时,父类中的属性也需要初始化!!在父类添加无参数的构造方法后错误解决
- this.petName=petName;
- this.ownerName=ownerName;
- }
- public void playWithOwner(){
- System.out.println(getPetName()+"正在和主人"+getOwnerName()+"玩耍");
- }
- }
- ********** ” 父类的私有属性可以被继承???” ********
- package practise02_2;
- public class Dog extends Pet{
- //值得注意的是:这里虽然没有定义子类属性,但是并不代表子类继承了父类的私有属性
- //子类只是调用了父类的构造方法,实例化子类时,值传给子类构造方法的形参
- //如下可验证:子类构造方法的形参和父类不同,两者之间没任何关系
- public Dog(String a , String b ) {//形参而已,并无实际意义
- super(a, b);
- // TODO Auto-generated constructor stub
- }
- public void playWithOwner(){
- System.out.println(getPetName()+"正在和主人"+getOwnerName()+"玩耍");
- }
- }
- **************主函数***************
- package practise02_2;
- public class Test {
- public static void main(String[] args) {
- Cat cat=new Cat("阿花","Tom" );
- Dog dog=new Dog("旺财","Tom");
- cat.playWithOwner();
- dog.playWithOwner();
- }
- }
- **************运行结果***********

java constructor 在构造子类时,一定会调用到父类的构造方法 “ 私有属性被继承了?”问题的更多相关文章
- java中的反射,知道类名创建类,还可以设置私有属性的值
刚刚学到了反射,感觉反射的功能好强大,所以想写篇博客记录下自己的学习成果. 利用反射来创建对象. Class c1=Class.forName("test.Person");//通 ...
- 关于JAVA中子类和父类的构造方法
本篇文章总结了一些关于Java构造方法的常见问题. 为什么创建了一个子类对象会调用其父类的构造方法 如下代码示例: package simplejava; class Super { String s ...
- Java中子类能继承父类的私有属性吗?
前段时间去听老师讲课的时候,老师告诉我子类是可以继承父类所有的属性和方法的.当时我是极其疑惑的,因为之前学校考试时这个考点我记得很清楚:子类只能继承父类的非私有属性和方法.老师给我的解释是这样的--先 ...
- Java中对象构造
构造函数 作用:在构造对象的同时初始化对象.java强制要求对象 诞生同时被初始化,保证数据安全. 调用过程和机制:①申请内存,②执行构造函数的函数体,③返回对象的引用. 特点:与类同名,无返回类型, ...
- java中构造代码块、方法调用顺序问题
1. 继承的概念 继承在本职上是特殊——一般的关系,即常说的is-a关系.子类继承父类,表明子类是一种特殊的父类,并且具有父类所不具有的一些属性或方法. 2. 继承中的初始化顺序 从类的结构上而言,其 ...
- Java之对象构造过程
先来运行一段代码 class A { public A() { init(); } public void init() { } public static void main(String[] ar ...
- JAVA笔记5__构造块、静态块/单例设计模式/继承/final关键字/super关键字
public class Main { { //构造块(在构造对象时调用,先于构造方法执行) System.out.println("我是构造块!"); } static{ //静 ...
- Copy Constructor的构造操作
Copy Constructor的构造操作 有三种情况,会以一个object的内容作为另一个class object的初值: 1. 对一个object做显式的初始化操作 class X{…}; X ...
- Default Constructor的构造操作
Default Constructor的构造操作 C++ Annotated Reference Manual书中的Section 12.1说过:default constructor 只有在编译器需 ...
随机推荐
- kafka 0.10.2 消息消费者
package cn.xiaojf.kafka.consumer; import org.apache.kafka.clients.consumer.ConsumerConfig; import or ...
- 【译】Envoy with Nomad and Consul (一)
原文: http://timperrett.com/2017/05/13/nomad-with-envoy-and-consul 在过去的许多年我的职业生涯一直是围绕着数据中心和平台基础设施.工作范围 ...
- BUGKUctf-web-writeup
---恢复内容开始--- 找到了个ctf平台.里面的web挺多的.终于将web题目写的差不多了. Web 签到题 加群就可以了 Web2 直接F12就看到了 文件上传测试 Burp抓包 文件名改成 1 ...
- MAVEN总结,整合Eclipse以及配置私服
对maven的理解 我们知道maven是一个项目管理工具,其核 心特点就是通过maven可以进行jar包的依赖管理,保证jar包版本的一致性,以及可以使多个项目共享jar包,从而能够 在开发大型jav ...
- 修复python的ModuleNotFoundError
我在项目里面用到了python,但其他的同事并没有安装python环境,为了不强制每个人都安装python,我下载了python-3.6.1-embed-amd64,并将用一个.bat去调用它. 大概 ...
- Spring学习(11)---JSR-250标准注解之 @Resource、@PostConstruct、@PreDestroy
1)@Resource(JSR-250标准注解,推荐使用它来代替Spring专有的@Autowired注解) Spring 不但支持自己定义的@Autowired注解,还支持几个由JSR-250规范定 ...
- Bash启动选项
Bash选项可以用来控制它的行为,有两种选项:单字符选项和多字符选项,多字符选项必须出现在单字符选项以前.1)单字符选项:由一个减号和一个字符组成2)多字符选项:由两个减号和多个字符组成 常用选项:- ...
- WPF MVVM 架构 Step By Step(6)(把actions从view model解耦)
到现在为止,我们创建了一个简单的MVVM的例子,包含了实现了的属性和命令.我们现在有这样一个包含了例如textbox类似的输入元素的视图,textbox用绑定来和view model联系,像点击but ...
- C#的命名管道(named pipe)
命名管道是一种从一个进程到另一个进程用内核对象来进行信息传输.和一般的管道不同,命名管道可以被不同进程以不同的方式方法调用(可以跨权限.跨语言.跨平台).只要程序知道命名管道的名字,发送到命名管道里的 ...
- GA代码中的细节
GA-BLX交叉-Gaussion变异 中的代码细节: 我写了一个GA的代码,在2005测试函数上一直不能得到与实验室其他同学类似的数量级的结果.现在参考其他同学的代码,发现至少有如下问题: 1.在交 ...