既然父类的属性设定为private,那为何还可以在它的子类中用super()访问

既然父类的属性设定为private,那为何还可以在它的子类中用super()访问

public class Work {
	private String workname;//工作名称

	public String getWorkname() {
		return workname;
	}

	public void setWorkname(String workname) {
		this.workname = workname;
	}
	public Work(){}//无参构造
	public Work(String name){//有参构造
		
		this.setWorkname(name);
	}
	//父类的方法
	public void descraption(){//编写工作描述的方法
		System.out.println("开心工作");
	}
}


public class TestWork extends Work {
	private int example;//测试用例个数
	private int bug;//Bug个数
	public int getExample() {
		return example;
	}
	public void setExample(int example) {
		this.example = example;
	}
	public int getBug() {
		return bug;
	}
	public void setBug(int bug) {
		this.bug = bug;
	}
	public TestWork(){}//无参构造
	public TestWork(String workname,int example,int bug){
		super(workname);
		this.setExample(example);
		this.setBug(bug);
	}
	//重写父类方法
	public void descraption(){
		System.out.println(this.getWorkname()+"的日报是,今天编写了"+this.getExample()+"个测试用例,发现了"+this.getBug()+"个Bug");
	}
}


正在回答

登陆购买课程后可参与讨论,去登陆

2回答

这个是通过继承的方式访问的 ,如果你在子类中定义父类的对象去访问私有属性,就是不能访问的。祝学习愉快!

摄影祖师爷 2018-05-20 21:34:13

兄弟你是怎么做到的,我子类super后面加父类的私有属性,访问不到的。

package com.my.animal;

public class Animal {

		private String name;
		private int age;
		public String kind;
		
		public Animal() {
		}

		public Animal(String name, int age, String kind) {
			super();
			this.setName(name);
			this.age = age;
			this.kind = kind;
		}

		public String getName() {
			return name;
		}

		public void setName(String name) {
			this.name = name;
		}

		public int getAge() {
			return age;
		}

		public void setAge(int age) {
			this.age = age;
		}
		
		

}

package com.my.cat;

import com.my.animal.Animal;

public class Cat extends Animal{

	private String weight;
	
	public Cat() {
		
	}
	
	public Cat(String name,String weight) {
		super(name);
		this.weight = weight;
		this.setName(name);
	}

	public void run() {
		System.out.println(this.getName()+"is running happily and his age is"+this.getAge());
	}
}


  • 我的super(name)直接报错的。
    2018-05-20 21:34:46
  • super(name);是指要调用父类的这个方法,也就是Animal(String),父类有这样的结构方法吗,并没有,所以报错了。
    2018-05-21 10:02:11
  • 哦,super(参数)指的是调用父类的带有 (参数)的构造方法,是吗
    2018-05-21 11:46:06
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师