Java面向对象程序设计[董小园版][习题代码答案]-第七章

要点回顾:

1、继承:a.被继承的类叫父类(superclass);子类自动继承父类的所有非私有的成员变量和成员方法。

                b.子类与父类是单继承,每个子类只能有一个父类,一个父类可以有好多子类。

2、Object类(所有类的父类):所有类对Object类的继承是Java默认的,无需使用extends明确表示。其中有两个常用方法:

public boolean equals(Object obj);

public String toString();

 需要强调的是:a.对象之间的比较不能用==运算符,必须用equals()方法。

                          b.System.out.print(a);//相当于System.out.print(a.toString());

3、方法覆盖:子类与父类同名,参数表和返回类型完全一样,方法体的内容不同。

注意:a.子类中方法的访问权限不能比父类中被覆盖方法的访问权限低。

           b.子类对父类的非静态方法可以实现方法覆盖。

           c.子类创建的静态方法不会覆盖父类中同名的静态方法。

           d.静态方法不能实现方法重载。

4、关于子类的构造方法:a.系统自动调用

                                          b.子类主动调用(super),且必须放在子类构造方法第一行。

5、this:a.对于static属性和方法,this用不了。

1)使用this可以在类的内部引用该类的其他成员

class Test{
    double width;
    double length;

    void setItem(double width,double length){
        this.width=width;
        this.length=length;
    }
}

2)使用this调用类自己的其他构造方法

class Test{
    String name;
    int age;

    Test(String n){
        name=n;
    }

    Test(String n,int a){
        this(n);
        age=a;
    }
}

 6、super:a.上面子类构造方法中的子类主动调用

                   b.成员变量不能被覆盖,子类和父类若有同名变量,用super.变量名 引用父类变量

                    用super.方法名 引用父类方法

7、父类与子类对象转换

superclass A    subclass B

A  test;

test=new B();//父类对象引向子类实体

test.方法;//调用父类A和子类B共有的方法

注意:a.如果调用的子类方法覆盖了父类的同名方法,用上面的格式会调用子类重写后的方法

           b.可以对test进行子类强制类型转换,使用子类新增的方法 

B test2=(B)test;

test2.子类新增的方法;

实验与训练:

1、注意两个private 成员变量

package train7_1;
import java.util.*;
class Ball{
	private double r;
	
	public void setR(double x) {
		r=x;
	}
	
	public double getR() {
		return r;
	}
}

class Billiards extends Ball{
	Scanner reader=new Scanner(System.in);
	private String color;
	
	public void setCol(String clo) {
		color=clo;
	}
	
	public void show() {
		System.out.print("输入double型半径r:");
		setR(reader.nextDouble());
		System.out.println("该台球的颜色是:"+color+" 半径是:"+getR());
	}
}
public class Train7_1 {

	public static void main(String[] args) {
		Scanner reader=new Scanner(System.in);
		Ball test1=new Ball();
		System.out.print("输入一个double型数值的半径r:");
		test1.setR(reader.nextDouble());
		System.out.println("Ball类赋值得到的半径是:"+test1.getR());
		//这里不能用父类对象指向子类实体,父类和子类各有一个互不相同的私有变量
		Billiards test2=new Billiards();
		System.out.print("输入台球的颜色:");
		test2.setCol(reader.next());
		test2.show();
	}

}

2、

package train7_2;
class Material{
	protected String name;
	protected double price;
	
	Material(String n,double p){
		name=n;
		price=p;
	}
	
	public String toString() {
		System.out.println("name="+name+" price="+price);
		return null;
	}
}

class Wood extends Material{
	private String col;
	
	Wood(String n,double p,String c){
		super(n,p);
		col=c;
	}
	
	 public String toString() {
		System.out.println("name="+name+" price="+price+" col="+col);
		return null;
	}
}
public class Train7_2 {

	public static void main(String[] args) {
		 Material test=new Material("钢筋",2.25);
		 test.toString();
		 test=new Wood("红木",2.369,"red");//父类对象指向子类实体
		 test.toString();
	}

}

思考:(1)产生报错“不能降低自 Material 继承的方法的可视性”

          (2)产生报错“不能降低自 Object 继承的方法的可视性”

原因就是上面方法覆盖注意点a

3、这道题反倒是最简单的,对着例题改就行了哈~

package train7_3;
class Shape{
	String color;
	
	Shape(String c){
		color=c;
	}
	
	double getArea() {
		return 0;
	}
	
	void printInfo() {
		System.out.println("颜色是"+color);
	}
}

class Circle extends Shape{
	double radius;
	
	Circle(String c,double r){
		super(c);
		radius=r;
	}
	
	double getArea() {
		return Math.PI*radius*radius;
	}
	
	void printInfo() {
		super.printInfo();
		System.out.println("面积是"+getArea());
	}
}

class Rectangle extends Shape{
	double width,height;
	
	Rectangle(String c,double w,double h){
		super(c);
		width=w;
		height=h;
	}
	
	double getArea() {
		return width*height;
	}
	
	void printInfo() {
		super.printInfo();
		System.out.println("面积是"+getArea());
	}
}
public class Train7_3 {

	public static void main(String[] args) {
		Shape s;
		System.out.println("父类的引用指向圆形类对象:");
		s=new Circle("blue",1);
		s.printInfo();
		System.out.println("父类的引用指向矩形类对象;");
		s=new Rectangle("green",3,4);
		s.printInfo();
	}

}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java面向对象程序设计》(第)课后答案 39 / 39 《Java面向对象程序设计》(第)课后答案全文共39页,当前为第1页。《Java面向对象程序设计》(第)课后答案全文共39页,当前为第1页。Java面向对象程序设计Java面向对象程序设计》(第)课后答案全文共39页,当前为第1页。 《Java面向对象程序设计》(第)课后答案全文共39页,当前为第1页。 〔编著耿祥义张跃平〕 习题1 1.James Gosling 2. 〔1〕使用一个文本编辑器编写源文件. 〔2〕使用Java编译器〔javac.exe〕编译Java程序,得到字节码文件. 〔3〕使用Java解释器〔java.exe〕运行Java程序 3.Java的源文件是由若干个书写形式互相独立的类组成的. 应用程序中可以没有public类,若有的话至多可以有一个public类. 4.系统环境path D\jdk\bin; 系统环境classpath D\jdk\jre\lib\rt.jar;.; 5. B 6. Java源文件的扩展名是.java.Java字节码的扩展名是.class. 7. D 8.〔1〕Speak.java 〔2〕生成两个字节码文件,这些字节码文件的名字Speak.class 和 Xiti8.class 〔3〕java Xiti8 〔4〕执行java Speak的错误提示 Exception in thread "main" java.lang.NoSuchMethodError: main 执行java xiti8得到的错误提示 Exception in thread "main" java.lang.NoClassDefFoundError: xiti8 <wrong name: Xiti8> 执行java Xiti8.class得到的错误提示 Exception in thread "main" java.lang.NoClassDefFoundError: Xiti8/class 执行java Xiti8得到的输出结果 I'm glad to meet you 9.属于操作题,解答略. 习题2 1. D 2.[代码1][代码2]错误 //[代码3]更正为 float z=6.89F; 3.float型常量后面必须要有后缀"f"或"F". 对于double常量,后面可以有后缀"d"或"D",但允许省略该后缀. 4.public class Xiti4{ public static void main <String args[ ]>{ char ch1='你',ch2='我',ch3='他'; System.out.println<"\""+ch1+"\"的位置:"+<int>ch1>; System.out.println<"\""+ch2+"\"的位置:"+<int>ch2>; System.out.println<"\""+ch3+"\"的位置:"+<int>ch3>; } } 5.数组名字.length 6.数组名字.length 7.[代码1]A,65 [代码2]-127 《Java面向对象程序设计》(第)课后答案全文共39页,当前为第2页。《Java面向对象程序设计》(第)课后答案全文共39页,当前为第2页。[代码3] 123456.783,123456.78312 《Java面向对象程序设计》(第)课后答案全文共39页,当前为第2页。 《Java面向对象程序设计》(第)课后答案全文共39页,当前为第2页。 8. [代码1]false [代码2]true [代码3]false [代码4]3 [代码5]4.4 [代码6]8.8 习题3 输出110 if-else语句书写的不够规范,复合语句缺少大括号"{}",代码不够清晰. 2.你好好酷!! 3. public class Xiti3_3 { public static void main <String args[ ]>{ int startPosition=0,endPosition=0; char cStart='а',cEnd='я'; startPosition=<int>cStart; //cStart做int型转换据运算,并将结果赋值给startPosition endPosition=<int>cEnd ; //cEnd做int型转换运算,并将结果赋值给endPosition System.out.println<"俄文字母表:">; for<int i=startPosition;i<=endPosition;i++>{ char c='\0'; c=<char>i; //i做char型转换运算,并将结果赋值给c System.out.p

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值