继承中,为什么普通的成员变量可以继承带有private的变量能继承但是不能用
时间: 2024-05-18 18:14:54 浏览: 13
在继承中,子类是可以继承父类中的私有成员变量的,但是不能直接访问父类的私有成员变量,因为私有成员变量只能在本类中被访问。但是可以通过父类提供的公共方法来访问父类的私有成员变量。由于私有成员变量只能在本类中被访问,所以子类中不能直接使用父类中的私有成员变量,而只能通过父类提供的公共方法或者受保护的方法来访问父类中的私有成员变量。这是因为继承是一种“is-a”关系,子类对象继承了父类对象的所有特征,包括私有成员变量,但是不能直接访问私有成员变量。
相关问题
用java创建一个父类Person,包含两个成 员变量分别为name和age,和一个带两个参数的 构造方法; 创建一个子类Student继承自Person,子类有一个成员变量score(单门课成绩,范围在0-100之间),子类的构造方法通过sup
er调用父类的构造方法,并且添加一个参数score,同时子类还有一个打印成绩的方法printScore(),输出该学生的成绩。下面是代码实现:
```java
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
public class Student extends Person {
private int score;
public Student(String name, int age, int score) {
super(name, age);
this.score = score;
}
public void printScore() {
System.out.println("Score: " + score);
}
}
```
在这个例子中,我们创建了一个父类Person,它包含了两个成员变量name和age,以及一个带两个参数的构造方法。接着我们创建了一个子类Student,它继承自Person,并且添加了一个成员变量score,以及一个带三个参数的构造方法。在子类中,我们通过super调用了父类的构造方法,并且添加了一个参数score。最后,我们还添加了一个打印成绩的方法printScore(),它输出该学生的成绩。
用java编写有类 `Person` 和 `Student` ,它们之间存在继承关系,Person有成员变量name, sex, age,类型分别为String, char, int,构造方法Person(String,char,int)用来对成员变量进行初始化,成员方法setData(String,char,int)设置成员变量name, sex, age的值,getData()是不带参数且返回值是name, sex和age的值构成的字符串的成员方法;`Student` 是 `Person` 的子类,在 `Student` 中有int类型的sID和classNo用来表示学生的学号和班级号,它有带有5个参数的成员方法setData()和不带参数的方法getData(),setData()设置成员变量的值,getData()是返回五个成员变量值构成的字符串。
好的,这是一个面向对象的编程问题,我可以帮你解答。
首先,我们需要定义 `Person` 类,其中包含 `name`、`sex` 和 `age` 三个成员变量,以及一个构造方法用于初始化这三个成员变量,一个 `setData` 方法用于设置这三个成员变量的值,以及一个 `getData` 方法用于返回这三个成员变量的值构成的字符串。代码如下:
```java
public class Person {
private String name;
private char sex;
private int age;
public Person(String name, char sex, int age) {
this.name = name;
this.sex = sex;
this.age = age;
}
public void setData(String name, char sex, int age) {
this.name = name;
this.sex = sex;
this.age = age;
}
public String getData() {
return "Name: " + name + ", Sex: " + sex + ", Age: " + age;
}
}
```
接下来,我们需要定义 `Student` 类,它是 `Person` 类的子类,包含 `sID` 和 `classNo` 两个成员变量,以及一个带有五个参数的 `setData` 方法用于设置这五个成员变量的值,以及一个不带参数的 `getData` 方法用于返回这五个成员变量的值构成的字符串。代码如下:
```java
public class Student extends Person {
private int sID;
private int classNo;
public Student(String name, char sex, int age, int sID, int classNo) {
super(name, sex, age);
this.sID = sID;
this.classNo = classNo;
}
public void setData(String name, char sex, int age, int sID, int classNo) {
super.setData(name, sex, age);
this.sID = sID;
this.classNo = classNo;
}
public String getData() {
return super.getData() + ", Student ID: " + sID + ", Class No: " + classNo;
}
}
```
在 `Student` 类的构造方法中,我们需要调用父类 `Person` 的构造方法来初始化父类的三个成员变量,然后再初始化 `Student` 类自己的两个成员变量。在 `setData` 方法中,同样需要调用父类的 `setData` 方法来设置父类的三个成员变量的值,然后再设置 `Student` 类自己的两个成员变量的值。在 `getData` 方法中,我们首先需要调用父类的 `getData` 方法来获取父类的三个成员变量的值,然后再补充上 `Student` 类自己的两个成员变量的值。
这样,我们就完成了 `Person` 和 `Student` 两个类的定义。
相关推荐
![](https://img-home.csdnimg.cn/images/20210720083646.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)