• 1、1、关于Java编程中的继承的理解,不正确的有CD A、 继承是实现复杂类设计的一种方案。 B、 继承,意味着子类不用重复代码,就可以拥有父类定义的方法成员和数据成员,并可以增加新的数据成员和方法成员。 C、 子类没有显式地定义构造方法,则会默认继承父类的全部构造方法。 D、 一个子类可以继承自多个父类 E、 若一个类定义时不带关键字extends,则它继承Object类
  • 2、对如下代码的分析,正确的有:BCD
  • Java 多态继承的编程题 java继承与多态编程题_父类

    Java 多态继承的编程题 java继承与多态编程题_父类_02

    Java 多态继承的编程题 java继承与多态编程题_ide_03

  • A、 Test.java中第4行产生的完整输出为“DemoClass2不带参构造方法被调用” B、 Test.java中第4行产生的输出中包含字符串“DemoClass1的不带参构造方法被调用” C、 使用new调用DemoClass2的任何构造方法时,始终会首先自动调用它的父类DemoClass1的不带参数的构造方法,因此,Test.java中第6行产生的输出中包含“DemoClass1的不带参构造方法被调用” D、 成员变量member3不会被DemoClass2继承,因此在DemoClass2中无法直接修改member3
  • 3、下列关于属性隐藏和方法重写的说法,正确的有CD A、 子类的数据成员的数据类型和变量名与父类都一样,才表示父类的该数据成员(或属性)被子类隐藏。 B、 父类被隐藏的数据成员,在子类中再也无法访问了。 C、 重写意味着子类可以修改父类同名方法的行为。 D、 父类方法被子类重写,父类对象和子类对象在调用该重写方法时,就会表现出不同的行为,这就是多态在继承上的一个体现。
  • 4、super关键字的有关说法正确的有ACDE A、 若父类显式定义的构造方法都是带参数的,则子类在其构造方法的定义中,必须首先使用super显式地调用父类的构造方法。 B、 在子类定义中,可以使用super访问父类的private数据成员和方法成员。 C、 使用super调用父类的构造方法的语句,如果需要,必须是子类构造方法中执行语句的第1条。 D、 父类存在不带参数的构造方法,把“super();”作为子类构造方法的第一条执行语句或不存在语句“super();”,效果是一样的。 E、 子类对象在构造前,它的某个父类的构造方法总会被调用且仅调用1次。
  • 5、关于以下代码,说法错误的有ACDE
  • Java 多态继承的编程题 java继承与多态编程题_ide_04

  • A、 speak方法不能被A的子类继承 B、 getArea方法能被A的子类重写,而speak方法不能被A的子类重写 C、 PI是一个常量,但可以在程序运行过程中修改它的值 D、 如果不希望从A派生出子类,则需要在“class A”中间插入final关键字 E、 外部可以使用A.PI读取PI的值
  • 6、有关继承、上转型对象、多态的说法,正确的有ABCD A、 多态体现在方法名相同,但可以对应多个不同的代码段,程序运行过程中究竟执行哪个代码段,是由Java的多态机制确保的。 B、 继承时的多态可以体现在子类对父类重写的方法上 C、 假设有代码“ClassA a=new ClassB();”其中ClassB是ClassA的子类,则a为上转型对象变量。 D、 若调用上转型对象的方法,而该方法刚好被子类重写,则实际调用的是重写的方法,而不是父类的方法。
  • 7、下面代码的运行结果为:C
  • Java 多态继承的编程题 java继承与多态编程题_Java 多态继承的编程题_05

  • A、 constructor B,fun in B,constructor B,fun in B,constructor A,exception B、 constructor B,fun in B,constructor B,fun in B,constructor A,constructor A,fun in A C、 constructor A,constructor B,fun in B,constructor A,constructor B,fun in B,constructor A,exception D、 以上都不对
  • 8、关于Java抽象类与抽象方法的理解,正确的有ABCD A、 抽象类表示抽象的概念,其类声明必须有abstract关键字,抽象类中可以没有抽象方法 B、 抽象方法只是一个方法声明,没有方法体。 C、 只要某个类中存在抽象方法,就必须声明该类为抽象类 D、 无法直接用抽象类创建对象,必须从它派生出子类,才能创建对象。 E、 抽象类的子类都可以直接用来创建子类对象
  • 9、有关下面的类的代码(这是一个表示平面上一个封闭区域几何形状的类)的说法,正确的有:ABCD
  • Java 多态继承的编程题 java继承与多态编程题_java_06

  • A、 这是一个抽象类,它既包含了抽象方法,也包含了具体方法(非抽象方法)。 B、 如果要定义一个表示圆形的类,可以继承这个Shape类 C、 这个类的变量,可以作为构建柱体抽象类的数据成员,表示柱体的横截面形状。 D、 若要从这个类派生出非抽象的类,必须实现getArea和getPerimeter方法。 E、 由于该类是一个抽象类,因此外部不可以使用表达式“Shape.PI”。
  • 10、下列有关面向抽象编程的理解,正确的有ABCD A、 面向抽象编程能较好地适应应用需求的不断变化。 B、 面向抽象编程的关键之一是针对具体问题,能进行合理地抽象,构造出层次分明的抽象类。 C、 面向抽象编程是面向对象编程思想的扩展,面向对象编程强调对一批具体对象进行抽象,提炼出具体类,而面向抽象编程更进一步,主张对具体类进一步抽象,提炼出“抽象类”。 D、 面向抽象编程遵循了软件开发中的“开闭原则”,即:对修改关闭,对扩展开放。说白了,就是当软件需求有所变化,只需要定义新的类,而不需要修改已有的代码。

第2关:求各种不同类型封闭平面图形的外轮廓周长与面积

/**
 * @author JS
 * @creat 2021-03-28-下午 3:25
 */

import java.util.Scanner;

/**
 *类功能描述
 *@Authorkeyter
 *@Date 2021/3/28 下午 3:25
 */
abstract public class Shape {
    public  String shapeName;
    public  abstract void input(Scanner sc) ;
    Shape(){ }
    public abstract double getArea() ;
    public abstract double getPerimeter();
}
import java.util.Scanner;

/**
 *类功能描述
 *@Authorkeyter
 *@Date 2021/3/28 下午 3:24
 */
public class Rectangle extends Shape {
    private double width,height;
    public void input(Scanner sc){
        System.out.print("input width and height:");
        this.width=sc.nextDouble();
        this.height=sc.nextDouble();
    }
    public double getArea(){
        return width*height;
    }
    public double getPerimeter(){
        return 2*(width+height);
    }
Rectangle(){
        super();
        super.shapeName="rectangle";
    }
}
import java.util.Scanner;
public class MainClass {
    public static Scanner sc=new Scanner(System.in);
    public static void main(String[] args) {
        System.out.println("welcome to using the tool!");
        while(true) {
            int curChoice = MainClass.showAndSelectChoice();
            Shape shape = null;
            if(curChoice==0) {
                break;
            }
            switch(curChoice) {
                case 1:
                    shape=new Circle();break;
                case 2:
                    shape=new Triangle();break;
                case 3:
                    shape=new Rectangle();break;
                default:
                    System.out.println("error choice!");
                    continue;
            }
            shape.input(sc);
            double perimeter=shape.getPerimeter();
            double area=shape.getArea();
            System.out.printf("perimeter and area of this %s is %.2f, %.2f\n"
                    ,shape.shapeName,perimeter,area);
        }
        sc.close();

    }
    private static int showAndSelectChoice() {
        System.out.println("Please select one of the following options:");
        System.out.println("[0]quit");
        System.out.println("[1]compute perimeter and area of a circle");
        System.out.println("[2]compute perimeter and area of a triangle");
        System.out.println("[3]compute perimeter and area of a rectangle");
        int res=sc.nextInt();

        return res;
    }

}
import java.util.Scanner;

/**
 *类功能描述
 *@Authorkeyter
 *@Date 2021/3/28 下午 3:25
 */
public class Triangle extends Shape {
    public double getPerimeter() {
        return sideA+sideC+sideB;
    }
    public double getArea() {
        double p=(sideA+sideB+sideC)/2;
        return Math.sqrt(p*(p-sideC)*(p-sideB)*(p-sideA));

    }
    double sideA,sideB,sideC;
    public void input(Scanner sc){
        System.out.print("input lengths of three sides:");
        this.sideA=sc.nextDouble();
        this.sideB=sc.nextDouble();
        this.sideC=sc.nextDouble();
    }
    Triangle(){
        super();
        super.shapeName="triangle";
    }
}