精华内容
下载资源
问答
  • Java2实用教程第五版+第五章习题答案

    千次阅读 多人点赞 2021-03-12 22:01:56
    这是《Java2实用教程第五版》的试题答案,需要的同学评论关注加点赞 有问题可以在评论区提出 1.问答题 (1)子类可以有多个父类吗? 不可以。Java是单继承的,只能继承一个父类。 (2)java.lang包中的Object类是...

    这是《Java2实用教程第五版》的试题答案,需要的同学评论关注加点赞

    有问题可以在评论区提出

    IMG_20210308_172835

    1.问答题
    (1)子类可以有多个父类吗?

    不可以。Java是单继承的,只能继承一个父类。

    (2)java.lang包中的Object类是所有其他类的祖先吗?

    (3)如果子类和父类不在同一个包中,子类是否继承父类的友好成员?

    不继承。关于各个访问修饰符的访问权限可以看下表

    image-20210312211146862

    (4)子类怎样隐藏继承的成员变量?

    声明与父类同名的成员变量。

    (5)子类重写方法的规则是怎样的?重写方法的目的是什么?

    子类重写的方法的返回值类型,方法名,参数类型,顺序,个数都要与父类继承的方法相同,而且访问修饰符的限定范围大于等于父类方法。目的是可以父类的状态和行为改变为自身的状态和行为,实现多态。

    (6)父类的final方法可以被子类重写吗?

    不可以

    (7)什么类中可以有abstract方法?

    abstract类。abstract方法必须在abstract类中,而abstract类中可以没有abstract方法

    (8)对象的上转型对象有怎样的特点?

    上转型对象不能操作子类新增的成员变量,不能调用子类新增的方法。上转型对象可以访问子类继承或隐藏的成员变量,可以调用子类继承的方法或子类重写的实例方法。

    (9)一个类的各个子类是怎样体现多态的?

    通过重写方法。

    (10)面向抽象编程的目的和核心是什么?

    面向抽象编程目的是为了应对用户需求的变化,核心是让类中每种可能的变化对应地交给抽象类的一个子类去负责,从而让该类的设计者不去关心具体实现。

    2.选择题
    (1)下列哪个叙述是正确的?
    A.子类继承父类的构造方法。
    B.abstract类的子类必须是非abstract类。
    C.子类继承的方法只能操作子类继承和隐藏的成员变量。
    D.子类重写或新增的方法也能直接操作被子类隐藏的成员变量。

    答案:C
    子类是不继承父类的构造方法的,而是必须调用其父类的构造方法。
    abstract类的子类可以是abstract类,如果是非abstract类,就必须重写父类中所有的abstract方法。
    D中子类新增的方法是不能直接操作被子类隐藏的成员变量的。

    (2)下列哪个叙述是正确的?
    A.final类可以有子类。
    B.abstract类中只可以有abstract方法。
    C.abstract类中可以有非abstract方法,但该方法不可以用final修饰。
    D.不可以同时用final和abstract修饰同一个方法。
    E.允许使用static修饰abstract方法。

    答案:D
    用final修饰的类是不允许被继承的,A错误
    abstract类中也可以有普通成员方法,B错误
    abstract类中的非abstract方法是可以用final修饰的,而abstract方法是不可以被final修饰的,C错误
    D同上,所以正确
    不允许使用static修饰abstract方法,E错误。

    (3)下列程序中注释的哪两个代码(A、B、C、D)是错误的?(无法通过编译)?

    class Father{
        private int money=12;
        float height;
        int seeMoney(){
            return money;//A
        }
    }
    class Son extends Father{
        int height;
        int lookMoney(){
            int m = seeMoney(); //B
            return m;
        }
    }
    class E{
        public static void main(String args[]){
            Son erzi = new Son();
            erzi.money = 300;   //C
            erzi.height = 1.78F;//D
        }
    }
    

    答案:CD
    程序声明了Son的对象erzi,去调用money属性赋值,虽然Son继承了Father,但是money是Father的私有变量,是无法继承的,不能够赋值。而且在Son类中声明了一个与Father同名的属性height,此时子类就隐藏了继承的成员变量,调用的时候就是在调用子类自己的成员变量height,因为是int型,无法被赋值给float型,所以C和D是错误的。

    (4)假设C是B的子类,B是A的子类,cat是C类的一个对象,bird是B类的一个对象,下列哪个叙述是错误的?
    A. cat instanceof B 的值是true。
    B. bird instanceof A的值是true。
    C. cat instanceof A的值是true。
    D. bird instanceof C的值是true。

    答案:D
    instanceof运算符判断左面的对象是否是右面的类或其子类所创建的。
    cat是C类的对象,而C是B的子类,所以A正确
    bird是B类的对象而B是A的子类,所以B正确
    cat是C类的对象,而C是B的子类,B又是A的子类,所以C正确
    bird是B类的对象,而B是C的父类,所以D错误

    (5)下列程序中注释的哪个代码(A、B、C、D)是错误的(无法通过编译)?

    class A{
        static int m;
        static void f(){
            m = 20;    //A
        }
    }
    class B extends A{
        void f(){    //B
            m = 222;    //C
        }
    }
    class E{
        public static void main(String args[]){
            A.f();    //D
        }
    }
    

    答案:B
    实例方法是不能重写静态方法的,所以静态方法重写必须是静态方法。

    (6)下列程序中注释的哪个代码(A、B、C、D)是错误的?

    abstract class Takecare{
    protected void speakHello(){} //A
    public abstract static void cry(); //B
    static int f(){ return 0;} //C
    abstract float g(); //D
    }

    答案:B
    abstract方法不能用static和private修饰;对于类,不能同时用final和abstract修饰,因为final关键字使得类不可继承,而abstract修饰的类如果不可以继承将没有任何意义。

    (7)下列程序中注释的哪个代码(A、B、C、D)是错误的(无法通过编译)?

    abstract class A{
    abstract float getFloat(); //A
    void f() //B
    { }
    }
    public class B extends A{
    private float m = 1.0f; //C
    private float getFloat () //D
    {
    return m;
    }
    }

    答案:D
    方法重写要求重写的方法的访问权限大于等于被重写的方法,父类该方法权限为友好,子类中为私有,所以是错误的。

    (8)将下列哪个代码(A、B、C、D)放入程序中标注的【代码】处将导致编译错误?
    A. public float getNum(){return 4.0f;}
    B. public void getNum(){}
    C.public void getNum(double d){}
    D.public double getNum(float d){return 4.0d;}

    class A{
        public float getNum(){
            return 3.0f;
        }
    }
    public class B extends A{
        【代码】
    }
    

    答案:B
    方法重写要求方法名,返回值类型,参数完全相同,所以A符合,B返回值类型不同,编译错误。而C和D不仅返回值类型不同,参数也不同,不属于方法重写,而是属于子类自己新增的方法。

    (9)对于下列代码,下列哪个叙述是正确的?
    A.程序提示编译错误(原因是A类没有不带参数的构造方法)。
    B.编译无错误,【代码】输出结果是0。
    C.编译无错误,【代码】输出结果是1。
    D.编译无错误,【代码】输出结果是2。

    class A{
        public int i = 0;
        A(int m){
            i=1;
        }
    }
    public class B extends A{
        B(int m){
            i=2;
        }
        public static void main(String args[]){
            B b = new B(100);
            System.out.println(b.i);//【代码】
        }
    }
    

    答案:A
    父类的构造方法不允许被继承,不允许被重写,但在子类的构造过程中必须调用其父类的构造方法,如果子类的构造方法中没有显式的调用父类的构造方法(super关键字),则系统默认调用父类无参的构造方法。如果子类构造方法中既没有显式调用父类的构造方法,而父类又没有无参的构造方法,则编译出错。

    3.阅读程序
    (1)请说出E类中【代码1】和【代码2】的输出结果。

    class A{
        double f(double x,double y){
            return x + y;
        }
    }
    class B extends A{
        double f(int x,int y){
            return x*y;
        }
    }
    public class E{
    public static void main(String args[]){
        B b = new B();
        System.out.println(b.f(3,5));    //【代码1】
        System.out.println(b.f(3.0,5.0));    //【代码2】
      }
    }
    

    答案:【代码1】15.0 。【代码2】 8.0
    B类继承了A类,但是B中的f方法并不是重写A类中的(参数类型不同),【代码1】调用f传两个int,实际调用的是B类自己的方法,返回值是double,所以输出15.0 。【代码2】调用f传两个double,调用的是继承自A类的方法,输出8.0 。

    (2)请说出B类中【代码1】好【代码2】的输出结果。

    class A{
        public int getNumber(int a){
            return a+1;
        }
    }
    class B extends A{
        public int getNumber(int a){
            return a+100;
        }
        public static void main(String args[]){
            A a = new A();
            System.out.println(a.getNumber(10));    //【代码1】
            a = new B();
            System.out.println(a.getNumber(10));    //【代码2】
        }
    }
    

    答案:【代码1】:11。 【代码2】:110 。
    对象a是A类的对象,调用的是A类自己的方法,接着让a实例化B类,a称为上转型对象,此时调用的是子类重写父类的方法。

    (3)请说出E类中【代码1】~【代码4】的输出结果。

    class A{
        double f(double x,double y){
            return x+y;
        }
        static int g(int n){
            return n*n;
        }
    }
    class B extends A{
        double f(double x,double y){
            double m = super.f(x,y);
            return m+x*y;
        }
        static int g(int n ){
            int m = A.g(n);
            return m+n;
        }
    }
    public class E{
        public static void main(String args[]){
            B b = new B();
            System.out.println(b.f(10.0,8.0));    //【代码1】
            System.out.println(b.g(3));    //【代码2】
            A a = new B();
            System.out.println(a.f(10.0,8.0));    //【代码3】
            System.out.println(a.g(3));    //【代码4】
        }
    }
    

    答案:【代码1】:98.0 。 【代码2】:12 。【代码3】:98.0 。 【代码4】:9
    代码1调用b对象的f方法,b对象是B类实例化的,调用的是B类自己的f方法,传入10.0和8.0后,用super关键字调用了父类的f方法,得到18.0赋值给m,最后返回18.0+10.0*8.0也就是98.0。
    【代码2】调用B类中的静态方法g传入3,方法内又去调用父类中的g方法传入3,得到9赋值给m后,输出9+3也就是12。
    【代码3】a对象是上转型对象,上转型对象可以调用重写父类的方法以及父类派生的方法,所以a调用的f方法是它重写的方法,那么具体过程就跟【代码1】相同,答案为98.0
    【代码4】在于g方法是静态方法,静态方法是不允许被重写的,所以B类中的g方法相当于该类特有的方法,那么a调用的g方法实际上是父类的,输出结果为9 。

    (4)请说出E类中【代码1】~【代码3】的输出结果。

    class A{
        int m;
        int getM(){
            return m;
        }
        int seeM(){
            return m;
        }
    }
    class B extends A{
        int m;
        int getM(){
            return m+100;
        }
    }
    public class E{
    		public static void main(String args[]){
        	B b = new B();
        	b.m = 20;
        	System.out.println(b.getM());//【代码1】上转型对象访问的是 被隐藏的m。
        	A a = b;
        	a.m = -100;        //上转型对象访问的是被隐藏的m
        	System.out.println(a.getM());//【代码2】上转型对象调用的一定是子类重写的getM()方法
        	System.out.println(b.seeM());//【代码3】子类继承的seeM()方法操作的m是被子类隐藏的m
        }
    }
    

    答案:【代码1】:120 【代码2】:120 【代码3】-100
    详情请看题目代码中的注释。

    4.编程题(参考例子13)
    设计一个动物声音“模拟器”,希望模拟器可以模拟许多动物的叫声,要求如下。

    • 编写抽象类Animal

    Animal抽象类有两个抽象方法cry()和getAnimalName(),即要求各种具体的动物给出自己的叫声和种类名称。

    • 编写模拟器类Simulator

    该类有一个playSound(Animal animal)方法,该方法的参数是Animal类型,即参数animal可以调用Animal的子类重写的cry()方法播放具体动物的声音,调用子类重写的getAnimalName()方法显示动物种类的名称。

    • 编写Animal的子类:Dog和Cat类

    下图是Simulator、Animal、Dog、Cat的UML图

    qq_pic_merged_1615557568385

    编写主类Application(用户程序)
    在主类Application的main方法中至少包含如下代码:

    Simulator simulator = new Simulator();
    simulator.playSound(new Dog());
    simulator.playSound(new Cat());
    
    Animal.java
    public abstract class Animal{
        public abstract void cry();
        public abstract String getAnimalName();
    }
    
    Simulator.java
    public class Simulator{
        public void playSound(Animal animal){
            System.out.println("现在播放"+animal.getAnimalName()+"类的声音:");
            animal.cry();
        }
    }
    
    Dog.java
    public class Dog extends Animal{
        public void cry(){
            System.out.println("汪汪...汪汪");
        }
        public String getAnimalName(){
            return "狗";
        }
    }
    
    Cat.java
    public class Cat extends Animal{
        public void cry(){
             System.out.println("喵喵...喵喵");
         }
          public String getAnimalName(){
            return "猫";
        }
    }
    
    Application.java
    public class Test{
        public static void main(String args[]){
            Simulator simulator = new Simulator();
            simulator.playSound(new Dog());
            simulator.playSound(new Cat());
        }
    }
    
    展开全文
  • 这是《Java2实用教程第五版》的试题答案,需要的同学评论关注加点赞 有问题可以在评论区提出

    这是《Java2实用教程第五版》的试题答案,需要的同学评论关注加点赞

    有问题可以在评论区提出

    IMG_20210308_172835

    Xnip2021-03-16_19-30-46

    展开全文
  • Java2实用教程第五版+第四章习题答案

    千次阅读 多人点赞 2021-03-11 21:38:25
    这是《Java2实用教程第五版》的试题答案,需要的同学评论关注加点赞 有问题可以在评论区提出 1.问答题 (1)面向对象语言有哪三个特性? 封装、继承和多态 (2)类名应当遵守怎样的编程风格? 当类名由几个单词复合...

    这是《Java2实用教程第五版》的试题答案,需要的同学评论关注加点赞

    有问题可以在评论区提出

    IMG_20210308_172835

    1.问答题
    (1)面向对象语言有哪三个特性?

    封装、继承和多态

    (2)类名应当遵守怎样的编程风格?

    当类名由几个单词复合而成时,每个单词的首字母使用大写。

    (3)变量和方法的名字应当遵守怎样的编程风格?

    名字的首单词的首字母使用小写,如果变量的名字由多个单词组成,从第2个单词开始的其他单词的首字母使用大写。

    (4)类体内容中声明成员变量是为了体现对象的属性还是行为?

    属性

    (5)类体中定义的非构造方法是为了体现对象的属性还是行为?

    行为

    (6)什么时候使用构造方法?构造方法有类型吗?

    用类创建对象时。没有类型。

    (7)类中的实例变量在什么时候会被分配内存空间?

    用类创建对象时。

    (8)什么叫方法的重载?构造方法可以重载吗?

    一个类中可以有多个方法具有相同的名字,但这些方法的参数必须不同,即是参数的个数不同,或者是参数的类型不同。可以。

    (9)类中的实例方法可以操作类变量(static变量)吗?类方法(static方法)可以操作实例变量吗?

    可以。不可以。

    (10)类中的实例方法可以用类名直接调用吗?

    不可以。

    (11)简述类变量和实例变量的区别。

    一个类通过使用new运算符可以创建多个不同的对象,不同的对象的实例变量将被分配不同的内存空间。所有对象的类变量都分配给相同的一处内存,对象共享类变量。

    (12)this关键字代表什么?this可以出现在类方法中吗?

    代表调用当前方法的对象。不可以。

    2.选择题
    (1)下列哪个叙述是正确的?
    A. Java应用程序由若干个类所构成,这些类必须在一个源文件中。
    B. Java应用程序由若干个类所构成,这些类可以在一个源文件中,也可以分布在若干个源文件中,其中必须有一个源文件含有主类。
    C. Java源文件必须含有主类。
    D. Java源文件如果含有主类,主类必须是public类。

    答案:B
    C选项中一个源文件可以没有主类,但在一个应用程序(工程)下必须由一个主类
    D选项如果若干源文件在同一个包下,主类可以不加public修饰。
    

    (2)下列哪个叙述是正确的?
    A. 成员变量的名字不可以和局部变量的名字相同。
    B. 方法的参数的名字可以和方法中声明的局部变量的名字相同。
    C. 成员变量没有默认值。
    D 局部变量没有默认值.。

    答案:D
    B选项如果相同,那么在方法内赋值操作就会混乱。
    C选项成员变量都是有默认值的比如int 是0 double 是0.0 String 是null。而局部变量是没有默认值的,所以在使用之前必须要进行初始化。
    

    (3)对于下列Hello类,哪个叙述是正确的?
    A. Hello类有两个构造方法。
    B. Hello类的int Hello()方法是错误的方法。
    C. Hello类没有构造方法。
    D. Hello无法通过编译,因为其中的hello方法的方法头是错误的(没有类型)

    class Hello{
        Hello (int m){
        }
        int Hello(){
            return 20;
        }
        hello(){
        }
    }
    
    答案:D
    Hello只有一个构造方法,构造方法是没有类型的,构造方法名必须和类名相同,故hello()不是构造方法,但他又没有类型,不符合普通方法的规定,所以编译会发生错误。
    

    (4)对于下列Dog类,哪个叙述是错误的?
    A. Dog(int m)与Dog(double m)是互为重载的构造方法。
    B. int Dog(int m)与void Dog(double m)是互为重载的非构造方法。
    C. Dog类只有两个构造方法,而且没有无参数的构造方法。
    D. Dog类有三个构造方法。

    class Dog{
        Dog(int m){
        }
        Dog(int double m){
        }
        int Dog(int m){
            return 23;
        }
        void Dog(double m){
        }
    }
    
    答案:D
    方法重载要求方法名相同,参数列表不同,可以是参数个数或者类型不同。构造方法也是可以重载的。Dog类有两个构造方法(不带类型的),而后两个方法是互为重载的非构造方法。
    

    (5)下列哪些类声明是错误的?
    A. class A
    B. public class A
    C. protected class A
    D. private class A

    答案:CD
    类只能用public 修饰或者默认(友好)
    

    (6)下列A类中【代码1】~【代码5】哪些是错误的?

    class Tom{
        private int x = 120;
        protected int y = 20;
        int z = 11;
        private void f(){
            x = 200;
            System.out.println(x);
        }
        void g(){
        x = 200;
        System.out.println(x);
        }
    }
    public class A{
      public static void main(String args[]){
          Tom tom = new Tom();   
          tom.x = 22;             //【代码1】
          tom.y = 33;             //【代码2】
          tom.z = 55;             //【代码3】
          tom.f();                //【代码4】
          tom.g();                //【代码5】
      }
    }
    
    答案:【代码1】【代码4】
    Tom类中的成员变量x是私有变量,不能直接使用对象调用。
    f是私有方法,也不能直接使用对象调用
    protect允许在同一个包中或者是子类调用
    

    (7)下列E类的类体中哪些【代码】是错误的?

    classE{
        int x;
        long y = x;
        public void f(int n){
        int m;
        int t = n+m;
        }
    }
    
    答案:【代码4】
    m是局部变量,没有默认值,所以在没有初始化的前提下使用会报错。
    

    3.阅读程序
    (1)说出下列E类中【代码1】~【代码3】的输出结果。

    class Fish{
        int weight = 1;
    }
    class Lake{
        Fish fish;
        void setFish(Fish s){
            fish = s;
        }
        void foodFish(int m){
            fish.weight=fish.weight + m;
        }
    }
    public class E{
        public static void main(String args[]){
            Fish redFish = new Fish();
            System.out.println(redFish.weight);//【代码1】
            Lake lake = new Lake();
            lake.setFish(redFish);
            lake.foodFish(120);
            System.out.println(redFish.weight);//【代码2】
            System.out.prihtln(lake.fish.weight);//【代码3】
        }
    }
    
    答案:【代码1】:1,【代码2】:121,【代码3】:121。
    redFish对象是Fish类的实例,所以具有Fish类的属性,输出的weight是1。
    lake.setFish方法传递的是redFish对象,将redFish对象赋值给Lake中的fish对象,那么二者就具有了相同的引用,从而具有完全相同的变量。那么调用lake.foodFish(120)时,lake对象中的fish对象的weight就变成了121,而redFish和fish的引用相同,其变量也相同,所以redFish中的weight也同样变成了121。
    

    (2)请说出A类中System.out.println的输出结果

    class B{
        int x = 100, y = 200;
        public void setX(int x){
            x = x;
        }
        public void setY(int y){
            this.y=y;
        }
        public int getXYSum(){
            return x+y;
        }
    }
    public class A{
        public static void main(String args[]){
            B b = new B();
            b.setX(-100);
            b.setY(-200);
            System.out.println("sum="+b.getXYSum());
        }
    }
    
    答案:sum=-100
    这道题涉及了this关键字的用法。
    主类中声明了B类的对象先调用setX方法传递参数为-100,但在这个方法体中的语句为x=x,等号右边的x是传递进的参数,而等号左边的x同样也指这个参数,所以相当于把参数的值赋值给本身,是没有任何意义的。
    而调用setY方法,等号左边是this.y指的就是当前类下的成员变量y,所以此时成员变量y被赋值为-200,返回x+y的和就为-100。
    

    (3)请说出A类中System.out.println的结果。

    class B{
        int n;
        static int sum = 0;
        void setN(int n){
            this.n = n;
        }
        int getSum(){
            for(int i=1;i<=n;i++)
                sum=sum+i;
            return sum;
        }
    }
    public class A{
        public static void main(String args[]){
          B b1 = new B(),b2=new B();
          b1.setN(3);
          b2.setN(5);
          int s1 = b1.getSum();
          int s2 = b2.getSum();
          System.out.println(s1+s2
        }
    } 
    
    答案:27
    这道题考察类变量(static变量)
    无论一个类实例了多少个对象,他们都共享类中的类变量。b1中的n是3,b2中的n是5,调用b1.getSum求和后得到的结果是1+2+3=6赋值给s1,由于sum是类变量,所以b2中的sum也是6,再调用b2.getsum求和,就是6+1+2+3+4+5=21赋值给了s2,此时b1中的sum也变成了21,最后输出s1+s2的值就为6+21=27。
    

    (4)请说出E类中【代码1】和【代码2】的输出结果。

    class A{
        double f(int x,double y){
            return x+y;
        }
        int f(int x,int y){
            return x*y;
        }
    }
    public class E{
        public static void main(String args[]){
            A a = new A();
            System.out.println(a.f(10,10));//【代码1】
            System.out.println(a.f(10,10.0));//【代码2】
        }
    }
    
    答案:【代码1】100 【代码2】20.0
    这道题考察方法重载,方法重载要求方法名必须相同,参数列表不同(参数的个数不同或者是参数类型不同),【代码1】传递的参数是两个int变量10和10,那么与int f(int x,int y)方法匹配,输出结果100,【代码2】传递的参数是int 10和double 10.0,和double f(int x, double y)匹配,输出结果是20.0注意不能写成20,返回的是double类型。
    

    (5)上机执行下列程序,了解可变参数、不重要

    (6)类的字节码进入内存时,类中的静态块会立刻被执行。执行下列程序,了解静态块、不重要

    4.编程题(参考例子7~9)
    用类描述计算机中CPU的速度和硬盘的容量,要求Java应用程序由4个类,名字分别是PC、CPU、HardDisk、和Test,其中Test是主类。

    • PC类与CPU和HardDisk类关联的UML图(图在下方)

    其中,CPU类要求getSpeed()返回speed的值,要求setSpeed(int m)方法将参数m的值赋值给speed;HardDisk类要求getAmount()返回amount的值,要求setAmount(int m)方法将参数m的值赋值给amount;PC类要求setCPU(CPU c)将参数c的值赋值给CPU,要求setHardDisk(HardDisk h)方法将参数h的值赋值给HD,要求show()方法能显示CPU的速度和硬盘的容量。

    • 主类Test的要求

    (1)main方法中创建一个CPU对象cpu,cpu将自己的speed设置为2200.
    (2)main方法中创建一个HardDisk对象disk,disk将自己的amount设置为200。
    (3)main方法中创建一个PC对象pc。
    (4)pc调用setCPU(CPU c)方法,调用时实参是cpu。
    (5)pc调用setHardDisk(HardDisk h)方法,调用时实参是disk。
    (6)pc调用show方法。

    这里写图片描述

    public class CPU{
        int speed;
        int getSpeed(){
            return speed;
        }
        public void setSpeed(int speed){
            this.speed = speed;
        }
    }
    public class HardDisk{
        int amount;
        int getAmount(){
            return amount;
        }
        public void setAmount(int amount){
            this.amount = amount;
        }
    }
    public class PC{
        CPU cpu;
        HardDisk HD;
        void setCPU(CPU cpu){
            this.cpu = cpu;
        }
        void setHardDisk(HardDisk HD){
            this.HD = HD;
        }
        void show(){
            System.out.println("CPU速度:"+cpu.getSpeed());
            System.out.println("硬盘容量"+HD.getAmount());
        }
    }
    public class Test{
        public static void main(String args[]){
            CPU cpu = new CPU(); //1
            HardDisk HD = new HardDisk(); //2
            cpu.setSpeed(2200); //1
            HD.setAmount(200); //2
            PC pc = new PC(); //3
            pc.setCPU(cpu); //4
            pc.setHardDisk(HD); //5
            pc.show(); //6
        }
    }
    
    展开全文
  • java2 实用教程第五版 第四章实例

    千次阅读 2019-05-15 23:18:40
    java2 实用教程第五版 耿祥义 张跃平编著 第四章代码 代码1:课本P59 class XiYouJiRenWu { float height,weight; String head,ear; void speak(String s) { System.out.println(s); } } public class ...

    第四天
    java2 实用教程第五版 耿祥义 张跃平编著
    第四章代码

    代码1:课本P59

    class XiYouJiRenWu {
    	float height,weight;
    	String head,ear;
    	void speak(String s) {
    		System.out.println(s);
    	}
    }
    
    public class Example4_1 {
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		XiYouJiRenWu ZhuBaJie;				//声明对象
    		ZhuBaJie = new XiYouJiRenWu();		//为对象分配变量(使用new和默认的构造方法)
    		Zhubajie.speak("hahaha");
    	}
    
    }
    
    
    运行结果:
    /**************
    hahaha
    ***************/
    

    代码2:课本P59

    package java课本项目;
    
    class Point {
    	int x,y;
    	Point(int a,int b){
    		x=a;
    		y=b;
    	}
    }
    
    
    public class Example4_2 {
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		Point p1,p2; 			//声明对象p1和p2
    		p1=new Point(10,10);	//为对象p1分配变量(使用new和类中的构造方法)
    		p2=new Point(23,35);	//为对象p2分配变量(使用new和类中的构造方法)
    	}
    
    }
    //此代码运行完成后只是实例化了Point对象p1和p2,并没有其他输出结果
    

    代码3:课本P62

    package java课本项目;
    
    class xiyouji {
    	float height,weight;
    	String head,ear;
    	void speak(String s) {
    		head="歪着头";
    		System.out.println(s);
    	}
    }
    
    
    public class Example4_3 {
    	public static void main(String args[]) {
    		xiyouji zhubajie,sunwukong;		//声明对象
    		zhubajie = new xiyouji();			//为对象分配变量
    		sunwukong = new xiyouji();
    		zhubajie.height=1.80f;					//对象给自己的变量赋值
    		zhubajie.head="猪头";
    		zhubajie.ear="一对猪耳朵";
    		sunwukong.height=1.62f;
    		sunwukong.weight=1000f;
    		sunwukong.head="铜头铁臂";
    		System.out.println("zhubajie的身高:"+zhubajie.height);
    		System.out.println("zhubajie的头:"+zhubajie.head);
    		System.out.println("sunwukong的体重:"+sunwukong.weight);
    		System.out.println("sunwukong的头:"+sunwukong.head);
    		zhubajie.speak("俺老猪想娶个媳妇儿!");			//对象调用方法
    		System.out.println("zhubajie现在的头:"+zhubajie.head);
    		sunwukong.speak("吃俺老孙一棒!");				//对象调用方法
    		System.out.println("sunwukong现在的头:"+sunwukong.head);
    	}
    }
    
    运行结果:
    /************************************************
    zhubajie的身高:1.8
    zhubajie的头:猪头
    sunwukong的体重:1000.0
    sunwukong的头:铜头铁臂
    俺老猪想娶个媳妇儿!
    zhubajie现在的头:歪着头
    吃俺老孙一棒!
    sunwukong现在的头:歪着头
    *************************************************/
    

    代码4:课本P65

    package java课本项目;
    
    class Pont{
    	int x,y;
    	void setXY(int m,int n) {
    		x=m;
    		y=n;
    	}
    }
    
    public class Example4_4 {
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		Pont p1,p2;
    		p1= new Pont();
    		p2= new Pont();
    		System.out.println("p1的引用:"+p1);
    		System.out.println("p2的引用:"+p2);
    		p1.setXY(1111,2222);
    		p2.setXY(-100, -200);
    		System.out.println("p1的x,y坐标:"+p1.x+","+p1.y);
    		System.out.println("p2的x,y坐标:"+p2.x+","+p2.y);
    		p1=p2;
    		System.out.println("将p2的引用赋值给p1后:");
    		System.out.println("p1的引用:"+p1);
    		System.out.println("p2的引用:"+p2);
    		System.out.println("p1的x,y坐标:"+p1.x+","+p1.y);
    		System.out.println("p2的x,y坐标:"+p2.x+","+p2.y);
    
    
    	}
    
    }
    
    运行结果:
    /*********************************************
    p1的引用:java课本项目.Pont@15db9742
    p2的引用:java课本项目.Pont@6d06d69c
    p1的x,y坐标:1111,2222
    p2的x,y坐标:-100,-200
    将p2的引用赋值给p1后:
    p1的引用:java课本项目.Pont@6d06d69c
    p2的引用:java课本项目.Pont@6d06d69c
    p1的x,y坐标:-100,-200
    p2的x,y坐标:-100,-200
    ***********************************************/
    

    代码5:课本P67

    package java课本项目;
    
    class Rect {
    	double width;							//矩形的宽
    	double height;							//矩形的高
    	double getArea() {
    		double area= width*height;
    		return area;
    	}
    }
    
    
    class Lader {
    	double above;							//梯形的上底
    	double bottom;							//梯形的下底
    	double height;							//梯形的高
    	double getArea() {
    		return (above+bottom)*height/2;
    	}
    }
    
    
    public class Example4_5 {
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		Rect ractangle=new Rect();
    		ractangle.width=109.87;
    		ractangle.height=25.18;
    		double area= ractangle.getArea();
    		System.out.println("矩形的面积:"+area);
    		Lader lader=new Lader();
    		lader.above=10.798;
    		lader.bottom=156.65;
    		lader.height=18.12;
    		area=lader.getArea();
    		System.out.println("梯形的面积:"+area);
    	}
    
    }
    
    运行结果:
    /*********************************************
    矩形的面积:2766.5266
    梯形的面积:1517.0788800000003
    *********************************************/
    

    代码6:课本P68

    package java课本项目;
    
    class Computer {
    	int add(int x,int y) {
    		return x+y;
    	}
    }
    
    
    public class Example4_6 {
    	public static void main(String args[]) {
    		Computer com= new Computer();
    		int m=100;
    		int n=200;
    		int result=com.add(m, n);		//将m,n的值“传值”给参数x,y
    		System.out.println(result);
    		result=com.add(120+m, n*10+8);	//将表达式120+m和n*10+8的值传给参数x,y
    		System.out.println(result);
    	}
    }
    
    运行结果:
    /*****************************
    300
    2228
    ******************************/
    

    代码7:课本P70

    package java课本项目;
    
    class Battery {
    	int electricityAmount;
    	Battery(int amount) {
    		electricityAmount=amount;
    	}
    }
    
    
    class Radio {
    	void openRadio(Battery battery) {
    		battery.electricityAmount=battery.electricityAmount-10;
    	}
    }
    
    
    public class Example4_7 {
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		Battery nanfu= new Battery(100);			//创建电池对象
    		System.out.println("南孚电池的电量为:"+nanfu.electricityAmount);
    		Radio radio=new Radio();					//创建收音机对象
    		System.out.println("收音机开始使用南孚电池");
    		radio.openRadio(nanfu);						//打开收音机
    		System.out.println("目前南孚电池的储电量为:"+nanfu.electricityAmount);
    	}
    
    }
    
    运行结果:
    /*********************************************
    南孚电池的电量为:100
    收音机开始使用南孚电池
    目前南孚电池的储电量为:90
    **********************************************/
    

    代码8:课本P72

    package java课本项目;
    
    class CCircle {
    	double radius,area;
    	void setRadius(double r) {
    		radius=r;
    	}
    	
    	double getRadius() {
    		return radius;
    	}
    	
    	double getArea() {
    		area=3.14*radius*radius;
    		return area;
    	}
    }
    
    
    class Circular {
    	CCircle bottom;
    	double height;
    	
    	void setBottom(CCircle c) {
    		bottom=c;
    	}
    	
    	void setHeight(double h) {
    		height=h;
    	}
    	
    	double getVolme() {
    		if(bottom == null) {
    			return -1;
    		}
    		else
    			return bottom.getArea ()*height/3.0;
    	}
    	
    	double getBottomRadius() {
    		return bottom.getRadius();
    	}
    	
    	public void setBottomRadius(double r) {
    		bottom.setRadius(r);
    	}
    }
    
    public class Example4_8 {
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		CCircle circle=new CCircle();			//代码1
    		circle.setRadius(10); 				//代码2
    		Circular circular=new Circular();	//代码3
    		System.out.println("circle的引用"+circle);
    		System.out.println("圆锥bottom的引用"+circular.bottom);
    		circular.setHeight(5); 
    		circular.setBottom(circle);; 		//代码4
    		System.out.println("circle的引用"+circle);
    		System.out.println("圆锥bottom的引用"+circular.bottom);
    		System.out.println("圆锥的体积:"+circular.getVolme());
    		System.out.println("修改circle的半径,bottom的半径同样变化");
    		circle.setRadius(20); 				//代码5
    		System.out.println("bottom的半径:"+circular.getBottomRadius());
    		System.out.println("重新创建circle,circle的引用将发生变化");
    		circle=new CCircle();				//重新创建circle,代码6
    		System.out.println("circle的引用"+circle);
    		System.out.println("但是不影响circular的bottom的引用");
    		System.out.println("圆锥的bottom的引用:"+circular.bottom);
    	}
    
    }
    
    运行结果:
    /************************************************************
    circle的引用java课本项目.Circle@15db9742
    圆锥bottom的引用null
    circle的引用java课本项目.Circle@15db9742
    圆锥bottom的引用java课本项目.Circle@15db9742
    圆锥的体积:523.3333333333334
    修改circle的半径,bottom的半径同样变化
    bottom的半径:20.0
    重新创建circle,circle的引用将发生变化
    circle的引用java课本项目.Circle@6d06d69c
    但是不影响circular的bottom的引用
    圆锥的bottom的引用:java课本项目.Circle@15db9742
    *************************************************************/
    

    代码9:课本P76

    package java课本项目;
    
    class SIM {
    	long number;
    	SIM(long number) {
    		this.number=number;
    	}
    	long getNumber() {
    		return number;
    	}
    }
    
    
    class MObileTelephone {
    	SIM sim;
    	void setSTM(SIM card) {
    		sim = card;
    	}
    	
    	long lookNumber() {
    		return sim.getNumber();
    	}
    }
    
    
    public class Example4_9 {
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		SIM simOne = new SIM(15191550042L);
    		MObileTelephone mobile =new MObileTelephone();
    		mobile.setSTM(simOne);
    		System.out.println("手机号码:"+mobile.lookNumber());
    		SIM simTwo = new SIM(13629875546L);
    		mobile.setSTM(simTwo);			//更换手机卡
    		System.out.println("手机号码:"+mobile.lookNumber());
    	}
    
    }
    
    运行结果:
    /************************
    手机号码:15191559942
    手机号码:13629875546
    ***************************/
    

    代码10:课本P78

    package java课本项目;
    
    class Laderr {
    	double 上底,高;			//实例变量
    	static double 下底;		//类变量
    	void 设置上底(double a) {
    		上底 = a;
    	}
    	
    	void 设置下底(double b) {
    		下底=b;
    	}
    	
    	double 获取上底() {
    		return 上底;
    	}
    	
    	double 获取下底() {
    		return 下底;
    	}
    }
    
    
    public class Example4_10 {
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		Laderr.下底=100;		//Laderr的字节码被加载到内存,通过类名操作类变量
    		Laderr laderrOne=new Laderr();
    		Laderr laderrTwo=new Laderr();
    		laderrOne.设置上底(28);
    		laderrTwo.设置下底(66);
    		System.out.println("laderOne的上底:"+laderrOne.获取上底());
    		System.out.println("laderOne的下底:"+laderrOne.获取下底());
    		System.out.println("laderTwo的上底:"+laderrTwo.获取上底());
    		System.out.println("laderTwo的下底:"+laderrTwo.获取下底());
    	}
    
    }
    
    运行结果:
    /************************
    laderOne的上底:28.0
    laderOne的下底:66.0
    laderTwo的上底:0.0
    laderTwo的下底:66.0
    *************************/
    

    由于第四章代码比较多,无法一次更新,下次继续更新!

    展开全文
  • Java2实用教程第五版+第三章习题答案

    千次阅读 多人点赞 2021-03-10 18:11:54
    这是《Java2实用教程第五版》的试题答案,需要的同学评论关注加点赞 有问题可以在评论区提出 1.问答题 (1) 关系运算符的运算结果是怎样的数据类型? boolean类型(true或者false) (2)if语句中的条件表达式的值...
  • Java2实用教程第五版+第二章习题答案

    千次阅读 多人点赞 2021-03-08 18:53:48
    这是《Java2实用教程第五版》的试题答案,需要的同学评论关注加点赞 有问题可以在评论区提出 1.问答题 (1)什么叫标识符?标识符的规则是什么?false是否可以作为标识符? 用来标识类名、变量名、方法名、类型名、...
  • 这是《Java2实用教程第五版》的试题答案,需要的同学评论关注加点赞 有问题可以在评论区提出 1.问答题 (1)"\hello"是正确的字符串常量吗? 不是。 (2)“你好KU”.length()和"\n\t\t".length()的值分别是多少? ...
  • Java2实用教程第五版+第六章习题答案

    千次阅读 多人点赞 2021-03-16 19:26:49
    这是《Java2实用教程第五版》的试题答案,需要的同学评论关注加点赞 有问题可以在评论区提出 1.问答题 (1)接口中能声明变量吗? 不能 (2)接口中能定义非抽象方法吗? 不能 可以把实现某一接口的类,所创建的...
  • 这是《Java2实用教程第五版》的试题答案,需要的同学评论关注加点赞 有问题可以在评论区提出 1.问答题 (1).Java语言的主要贡献者是谁? James Gosling (2)开发Java应用程序需要经过哪些主要步骤? 需要三个步骤...
  • 这是《Java2实用教程第五版》的试题答案,需要的同学评论关注加点赞 有问题可以在评论区提出 1.问答题 (1)JFrame类的对象的默认布局是什么布局? Frame容器的默认布局是BorderLayout布局。 (2)一个容器对象是否...
  • 这是《Java2实用教程第五版》的试题答案,需要的同学评论关注加点赞 有问题可以在评论区提出 1.问答题 (1)如果准备按字节读取一个文件的内容,应当使用FileInputStream流还是FileReader流? 使用FileInputStream...
  • java2 实用教程第五版 耿祥义 张跃平编著 第四章代码 代码1:课本P80 package java课本项目; import java.util.*; public class Example4_11 { public static void main(String[] args) { // TODO Auto-...
  • java2 实用教程第五版 耿祥义 张跃平编著 第三章代码 代码1:课本P36 public class Example3_1 { public static void main(String[] args) { char a1='十',a2='点',a3='进',a4='攻'; char secret = 'A'; a1 ...
  • 2.开发Java应用程序需要经过哪些主要步骤? -编写源文件、编译源文件生成字节码和加载运行字节码。 3.Java源文件是由什么组成的?一个源文件中必须要有public类吗? -Java源文件是由若干个书写形式互相独立的类组成...
  • 目录题型分布第一章第二章第三章第四章第五章第六章第七章第八章第九章第十章第十一章第十四章第十五章 题型分布 判断题151 选择题152 简答题 23 程序阅读题 35 难度微高 编程题 8 + 22 有泛型 ArrayList(一点点)...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,153
精华内容 4,061
关键字:

java2实用教程第五版

java 订阅