java 学习第09天--作业

选择
1.
在子类构造方法的哪个地方可以调用其父类的构造方法
A .任何地方 
B .构造方法的第一条语句   
C .构造方法的最后一条语句  
D .无法在子类构造方法中调用父类的构造方法
 
 
2.
下面说法正确的是
A   在一个子类中,一个方法不是public 的就不能被重载
B   子类覆盖一个方法只需要满足相同的方法名和参数类型就可以了
C   子类覆盖一个方法必须要有相同的方法名,参数和返回值类型
D   一个覆盖的方法必须有相同的方法名,参数和参数类型
知识点:
方法签名:返回值类型 + 方法名 + 形参列表
子类想要重写父类的方法,必须和父类的方法有相同的方法签名,如果返回值不同的话,表明子类中有两个同名的方法,一个是从父类继承而来的,一个是自己定义的,这将导致子类中出现重复定义的方法


3.
以下代码运行结果是
class A extends Integer{
    int x = 0;
}
A   编译成功
B   编译失败,因为 Integer final 类,不能被继承
C   编译失败,因为A 没有构造方法
D   编译成功,但运行会产生异常
 
4.
以下代码运行结果是
public class Test{
    final int x ;
    public Test(){
       System.out.println(x + 10);
    }
    public static void main(String[] args){
       Test t = new Test();
    }
}
A   编译报错(变量没有初始化)
B   运行期异常
C   输出10
D   输出0
 
1.
以下代码运行结果是
 
class MyClass{
    int num = 5;
    public void setNum(){
       num = 10;
    }
}
class E1 extends MyClass{
    public void setNum(){
       num = 15;
    }
}
public class InheritDemo {
    public static void main(String[] args) {
       E1 e = new E1();
       e.setNum();
       System.out.println(e.num);
    }
}
 
A   10
B   15
C   5
D   null
就近原则 

2.
以下代码运行结果是
class MyClass{
    int num = 5;
}
class E1 extends MyClass{
    int num = 10;
    public int getNum(){
       return super.num;
    }
}
public class InheritDemo {
    public static void main(String[] args) {
       E1 e = new E1();
       System.out.println(e.getNum());
    }
}
 
A   5
B   10
C   null
D   0
 
3.
以下代码运行结果是
class A{
    A(){
       System.out.print("A");
    }
}
class B extends A{
    B(){
       System.out.print("B");
    }
}
class C extends B{
    C(){
       System.out.print("C");
    }
}
public class InheritDemo {
    public static void main(String[] args) {
       C c = new C();
    }
}
 
A   ABC
B   BC
C   CBA
D   C
 
 
4.
以下代码执行的结果是
 
A   A
B   B
C   null
D   编译错误
 报错信息:类B是公共的, 应在名为 B.java 的文件中声明
 
 
简述
1.
什么是继承(Inheritance
 继承是实现代码复用的一种方式,其继承格式为:
class A extends B{
//类体;
}
 
2.
  “子类的成员变量和方法的数目一定大于等于父类的成员变量和方法的数目”,这种说法是否正确? 为什么?
 不正确,排除父类的成员变量和方法的修饰符为private
 
3.
简述子类在创建对象时,是如何初始化的?
  子类构造方法默认调用父类的空参构造,也就是包含类对象的初始化过程
 
 
4.
super 关键字的含义是什么?如何使用
 super关键字主要用于标示父类对象的空间.
super.成员变量;
super.成员方法;
子类构造方法中的第一句,默认是位super(),可以省略,系统会自动加载.
 
5.
简述子类如何重写父类方法
 
 
 
 
编程
1.
编写一个Animal 接口,其中有一个eat 方法,它有两个子类:Dog Cat ,两个子类分别实现Animal接口中eat 方法,打印不同内容“狗吃肉”,“猫吃鱼”
测试类中有一个方法feed (喂养),它的形参是Animal 接口,根据传入的对象不同,调用不同对象的eat 方法,可以让不同的对象产生eat 的动作。
 
//自定义接口
interface Animal{
//抽象方法
public abstract void eat();
}

//自定义Dog类,实现子类
class Dog implements Animal{
public void eat(){
System.out.println("狗吃肉");
}
}

//自定义Cat类,实现子类
class Cat implements Animal{
public void eat(){
System.out.println("猫吃鱼");
}
}

class Test{
public void feed(Animal a){//传递的是子类的实例对象
a.eat();
}
}

public class AnimalDemo{
public static void main(String[] args){
Test t = new Test();
t.feed(new Dog());
t.feed(new Cat());
}
 }

2.
定义一个Person 类,包括成员变量:姓名,性别,年龄,国籍,成员方法:工作,吃饭,睡觉
1 )根据Person 类,派生一个学生类,增加成员变量:学校,学号;重写工作方法:学生的工作是学习
2 )根据Person 类,派生一个工人类,增加成员变量:公司,工龄;重写工作方法:工人的具体工作内容
3 )根据学生类,派生出一个班干部类,增加成员变量:职务;增加方法:开会。
4 )编写测试类分别对上述3 类具体人物进行测试。
 
//自定义Person类
abstract class Person{
private String name;
private String sex;
private int age;
private String country;

public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
public void setSex(String sex){
this.sex = sex;
}
public String getSex(){
return sex;
}
public void setAge(int age){
this.age = age;
}
public int getAge(){
return age;
}
public void setCountry(String country){
this.country = country;
}
public String getCountry(){
return country;
}
//抽象方法
public abstract void work();
//非抽象方法
public void eat(){
System.out.println("eat....");
}
public void sleep(){
System.out.println("sleep....");
}
}

//自定义学生类
class Student extends Person{
private String school;
private String id;
//构造空参
public Student(){}
public void setSchool(String school){
this.school = school;
}
public String getSchool(){
return school;
}
public void setId(String id){
this.id = id;
}
public String getId(){
return id;
}
//重写工作方法
public void work(){
System.out.println("student is studying");
}
public void show(){
System.out.println(getName() + getSex() + getAge() + getCountry() + getSchool() + getId());
}
}

//自定义工人类
class Worker extends Person{
private String company;
private String num;
//构造空参
public Worker(){}
public void setCompany(String company){
this.company = company;
}
public String getCompany(){
return company;
}
public void setNum(String num){
this.num = num;
}
public String getNum(){
return num;
}
public void work(){
System.out.println("work is working");
}
public void show(){
System.out.println(getName() + getSex() + getAge() + getCountry() + getCompany() + getNum());
}
}
//自定义班干部类
class Leader extends Student{
private String duty;
public void setDuty(String duty){
this.duty = duty;
}
public String getDuty(){
return duty;
}
public Leader(){}
public void meet(){
System.out.println("meeting......");
}
public void show(){
System.out.println(getName() + getSex() + getAge() + getCountry() + getDuty());
}
}

public class PersonDemo{
public static void main(String[] args){
Student st = new Student();
st.setName("丛中之 ");
st.setAge(26);
st.setSchool(" NO 1 middle school ");
st.setId("007 ");
st.setSex(" 男");
st.setCountry(" China");
st.show();
st.work();
st.eat();
st.sleep();
System.out.println("=====================");
Worker w = new Worker();
w.setName("tom ");
w.setAge(26);
w.setSex(" 男");
w.setCountry(" China");
w.setCompany(" HP");
w.setNum(" 009");
w.show();
w.work();
w.eat();
w.sleep();
System.out.println("=====================");
Leader lead = new Leader();
lead.setName("tom7 ");
lead.setAge(22);
lead.setSex(" 男");
lead.setCountry(" China");
lead.setDuty(" meet");
lead.show();
lead.work();
lead.eat();
lead.sleep();
}
}

猜你喜欢

转载自blog.csdn.net/czz1141979570/article/details/79923357