-
1、1、关于Java编程中的继承的理解,不正确的有CD
A、继承是实现复杂类设计的一种方案。
B、继承,意味着子类不用重复代码,就可以拥有父类定义的方法成员和数据成员,并可以增加新的数据成员和方法成员。
C、子类没有显式地定义构造方法,则会默认继承父类的全部构造方法。
D、一个子类可以继承自多个父类
E、若一个类定义时不带关键字extends,则它继承Object类
-
2、对如下代码的分析,正确的有:BCD
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
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
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
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"; } }
java面向对象编程(2):继承与多态
最新推荐文章于 2023-10-15 10:45:12 发布