java面向对象编程(2):继承与多态

  • 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";
        }
    }
    

     

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值