类继承与接口(一)
}
}
class Student extends Person
{
Int age;//[代码1]增加年龄属性
Student(String name, int age){
super(name);
This.age=age;//[代码2]构造方法体
}
Student(String n, String l,int age){
语句8出错?为何?
不出错,同一个包里可以继承非private成员
实验
将编程题源程序、运行结果,以及实验中遇到的问题和解决问题的方法,写在实验报告上。
是,在加载某个类的时候,如果它的某个超类还没有被加载,那么必须首先加载这个超类;继承链上加载超类的顺序是:从object类开始知道当前类。就是继承链上接近object的超类,越优先被加载;默认情况下,同一个类仅需加载一次,既不会重复多次加载同一个类。
2.程序填空。按照以下需求将代码空缺处补齐:
类的继承
语句3出错?为何?
出错,同一个包里只能继承非private成员
语句4出错?为何?
不出错,同一个包里可以继承非private成员
语句5出错?为何?
不出错,同一个保利可以继承非private成员
语句6出错?为何?
不出错,同一个包里可以继承非private成员
语句7出错?为何?
出错,同一个包里只能继承非private成员
Father(){
System.out.println("father");
}
}
class Son extends Father {
Son(){
System.out.println("son");
}
}
(1)运行结果:
(2)
分析继承链上各个类构造方法的调用次序:
分析是否是超类构造方法调用在前:
Son();Father();Grandpa();
Teacher teacher1=new Teacher("Mr Green",30);
Student student1=new Student("John",18);
Teacher teacher2=new Teacher("Miss Red","North",25);
Student student2=new Student("Marry","South",2);
System.out.println(());
System.out.println(());
System.out.println(());
System.out.println(());
}
}
3成员的访问权限
Super(n,1);//[代码3]构造方法体
This.age=age;//[代码4]构造方法体
}
public String info(){
Return ()+”age”+age;//[代码5]返回姓名:住所:以及年龄的信息
}
}
public class Test{
public static void main(String args[]){
package test.sources
(2)编译上面的Defຫໍສະໝຸດ ultPkgFirst.java和DefaultPkgSecond.java,那么程序中的语句1到语句8是否编译出错,如果出错,写明原因:
语句1出错?为何?
不出错,同一个包里可以继承费private成员
语句2出错?为何?
不出错,同一个包里可以继承非private成员
protected int j = 200;
private int k = 300;
int m = 400;
public void show1(){
System.out.println("AnonymousPkgFirst类中的show1()方法");
}
protected void show2(){
需求分析:
校务管理系统,设计类来描述系统中的两个角色:教师与学生
public class Teacher
public class Student
抽取共性
public class Person
考虑在Person中设计教师与学生的公有域
已知部分代码设计如下
class Person
{ private String name;
将下面的两个程序DefaultPkgFirst.java和DefaultPkgSecond.java保存到某一目录下,比如D:\test\sources;然后回答问题。
//DefaultPkgFirst.java
public class DefaultPkgFirst{
public int i =100;
沿着继承链从子类开始一直到object为止
(2)在命令行上键入java–verboseConstructorChain,并回车,观察各个类的加载次序.
各个类的加载次序是:
分析是否超类先加载:
各个类的加载顺序依次是:class Grandpa->class Father extends Grandpa->class Son extends Father
private String location;
Person(){};
Person(String name){
=name;
location="hangzhou";
}
Person(String name,String location){
=name;
this.location=location;
This.age=age;//[代码2]构造方法体
}
Teacher(String n, String l,int age){
Super(n,1);//[代码3]构造方法体
This.age=age;//[代码4]构造方法体
}
public String info(){
Return ()+”age”+age;//[代码5]返回姓名:住所:以及年龄的信息
System.out.println("AnonymousPkgFirst类中的show2()方法");
}
private void show3(){
System.out.println("AnonymousPkgFirst类中的show3()方法");
}
void show4(){
System.out.println("AnonymousPkgFirst类中的show4()方法");
class ConstructorChain{
public static void main(String[] args){
new Son();
}
}
class Grandpa{
Grandpa(){
System.out.println("Grandpa");
}
}
class Father extends Grandpa{
实验9类继承与接口(一)
一、
1.掌握Java类的继承特点,包括子类声明、对象创建等。
2.掌握域的继承与隐藏的特点。
3.掌握方法的继承与重写的特点。
二、
1.程序阅读与分析
2.程序填空:按照需求将代码空缺处补齐。
3.成员的访问权限
三、
1.程序阅读与分析
执行类ConstructorChain,请写出输出结果,并分析出现该结果的原因。提示:参考构造方法链。
}
public String info(){
return
"name: "+name+" location: "+location;
}
}
class Teacher extends Person
{
Int age;//[代码1]增加年龄属性
Teacher(String name, int age){
super(name);
}
}
//DefaultPkgSecond.java
class DefaultPkgSecond{
public static void main(String[] args){
DefaultPkgFirst a = new DefaultPkgFirst();
System.out.println(a.i);//语句1
System.out.println(a.j);//语句2
System.out.println(a.k);//语句3
System.out.println(a.m);//语句4
a.show1();//语句5
a.show2();//语句6
a.show3();//语句7
a.show4();//语句8
}
}
(1)DefaultPkgFirst和DefaultPkgSecond这两个类都属于什么包?