什么是多态机制?什么事覆盖与重载?区别在哪?

本文详细介绍了Java中的多态机制,包括覆盖与重载的概念及其区别。解释了如何通过覆盖在子类中重新定义父类的方法,以及如何在同一类中通过重载实现多个同名但参数不同的方法。
多态是指一个程序中同名的不同方法共存的情况,java中提供两种多态机制,覆盖与重载。
覆盖:在子类中可以定义与父类中已定义的方法同名而内容不同的方法这种多态被称为覆盖。
重载:当在一类中定义了多个同名而不同内容的成员方法时我们称这些方法时重载。
由于覆盖的同名方法存在于子类对父类的关系中,在方法引用时指明引用的是父类的方法还是子类的不同覆盖和重载也就得以区分。
如下代码的输出是( )。 public class Test { public static void main(String[] args) { new Person().printPerson(); new Student().printPerson(); } } class Student extends Person { private String getInfo() { return "Student"; } } class Person { private String getInfo() { return "Person"; } public void printPerson() { System.out.println(getInfo()); } } A. Person Person B. Person Student C. Stduent Student D. Student Person 分数 2 作者 郑珺 单位 浙江传媒学院 A和B是两个接口,类C实现了接口A和接口B。以下代码错误的是? A. A a = new C(); B. B b = new C(); C. C c = new C(); D. C c = new A(); 分数 1 作者 周雪芹 单位 山东理工大学 以下有关类的继承的叙述中,正确的是:( )。 A. 子类能直继承父类所有的私有属性和私有方法,但是没有访问权限 B. 子类只能继承父类的方法,不能继承父类的属性 C. 子类能继承父类的成员变量和变员方法,访问没有任何限制 D. 子类不能继承父类的私有属性和私有方法 分数 2 作者 周雪芹 单位 山东理工大学 如下代码,程序的输出结果将是:( )。 class A { int a = 11; int b = 12; public void print() { System.out.println(a + " " + b); } } class B extends A { int a = 20; public void print() { System.out.println(a + " " + b); } } public class Main { public static void main(String[] args) { A aObj = new A(); aObj.print(); B bObj = new B(); bObj.print(); } } A. 11 12 20 0 B. 20 12 20 12 C. 11 12 11 12 D. 11 12 20 12 分数 2 作者 周雪芹 单位 山东理工大学 有如下程序代码,执行的结果为: class Base { void test() { System.out.println("Base.test()"); } } class Child extends Base { void test() { System.out.println("Child.test()"); } } public class Main { public static void main(String[] a) { Child anObj = new Child(); Base baseObj = anObj; baseObj.test(); } } A. Child.test() Base.test() B. Base.test() Child.test() C. Base.test() D. Child.test() 分数 2 作者 周雪芹 单位 山东理工大学 有如下父类、子类及测试类的定义,程序执行后,输出结果是true的语句为:( )。 class Father { } class Child extends Father { } public class Main { public static void main(String[] a) { Father f1=new Father(); System.out.println(f1 instanceof Father); //AA语句 System.out.println(f1 instanceof Child); //BB语句 Father obj=new Child(); System.out.println(obj instanceof Father); //CC语句 System.out.println(obj instanceof Child); //DD语句 Child c1=new Child(); System.out.println(c1 instanceof Father); //EE语句 System.out.println(c1 instanceof Child); //FF语句 } } A. AA、BB、CC、DD、EE、FF B. AA、BB、CC、DD、EE C. AA、CC、DD、EE、FF D. AA、BB、DD、FF 分数 1 作者 贾园园 单位 新疆科技学院 父类的引用指向自己子类的对象是()的一种体现形式。 A. 封装 B. 继承 C. 多态 分数 1 作者 贾园园 单位 新疆科技学院 接口是一种特殊的类,由()和公共的抽象方法组成,不能包含普通方法和构造方法。 A. 全局常量 B. 成员变量 C. 成员方法 D. 构造方法 分数 1 作者 吕行军 单位 河北农业大学 Java中,接口接口的关系是 A. 继承 B. 实现 C. 封装 D. 多态 分数 1 作者 殷伟凤 单位 浙江传媒学院 Java中,实现“接口”时的关键字是( ) A. class B. abstract C. implements D. extends 分数 1 作者 大数据2021 单位 山东科技大学 现有两个类定义如下: public class ClassOne { public void methodOne() { ... } //Other methods are not shown. } public class ClassTwo extends ClassOne { public void methodTwo() { ... } //Other methods are not shown. } 现在另一个类中定义如下内容: ClassOne c1 = new ClassOne(); ClassOne c2 = new ClassTwo(); 请问以下哪个会产生错误? I. c1.methodTwo(); II.c2.methodTwo(); III.c2.methodOne(); A. I B. II C. III D. I and II 分数 1 作者 大数据2021 单位 山东科技大学 抽象类的子类还是抽象吗? A. 不是抽象类。 B. 如果子类实现了某个抽象方法,则不再是抽象类。 C. 还是抽象类。 D. 如果子类实现了所有的抽象方法,则可以不定义为抽象类。 分数 1 作者 大数据2021 单位 山东科技大学 使用接口的通常办法是 A. 通过接口名.方法名使用 B. 直接调用接口的方法 C. 定义一个接口变量,将变量指向实现接口的对象 D. 生成一个接口对象,通过对象访问 分数 1 作者 大数据2021 单位 山东科技大学 在子类中,如何访问父类的被覆盖成员方法(假设该方法是public访问级) A. 利用super关键字访问 B. 创建一个父类的变量,用父类的变量访问 C. 利用父类的类名访问 D. 无法访问到 分数 2 作者 wm 单位 西南石油大学 下面这段代码的输出结果是什么? class AA{ public int cal(int a,int b){ return a+b; } } class BB extends AA{ @Override public int cal(int a,int b){ return a*b; } } class CC extends AA{ @Override public int cal(int a,int b){ return 10*(a+b); } } public class InterfaceTest2 { public static void main(String args[]){ AA aa=new AA(); System.out.println(aa.cal(3,6)); aa=new BB(); System.out.println(aa.cal(3,6)); aa=new CC(); System.out.println(aa.cal(3,6)); } } A. 9 9 9 B. 9 18 18 C. 9 18 90 D. 18 18 90 分数 2 作者 马俊 单位 兰州大学 在Java语言中,关于类之间的继承关系陈述正确的是? A. 多继承 B. 单继承 C. 多线程继承 D. 隔代继承 分数 1 作者 马俊 单位 兰州大学 Java中,下面是有关子类及父类构造方法的描述,其中正确的是? A. 创建子类的对象时,先调用子类自己的构造方法,然后调用父类的构造方法 B. 子类无条件地继承父类不含参数的构造方法 C. 子类必须通过super关键字调用父类的构造方法 D. 子类无法继承父类的构造方法 分数 1 作者 马俊 单位 兰州大学 Java中关于抽象类的描述,错误的是? A. 抽象类中只有抽象方法 B. 用abstract修饰的类是抽象类 C. 抽象方法没有方法体 D. 抽象类不能用来实例化对象 分数 1 作者 马俊 单位 兰州大学 Java中关于接口的描述,错误的是? A. 一个类可以实现多个接口 B. 接口之间可以有继承关系 C. 接口实现了类的多继承功能 D. 任何类实现接口,都必须实现接口的所有方法 分数 1 作者 马俊 单位 兰州大学 在Java中,用abstract定义的类 A. 可以被实例化 B. 不能派生子类 C. 不能被继承 D. 只能被继承 分数 1 作者 马俊 单位 兰州大学 Java中,如果类C是类B的子类,类B是类A的子类,那么下面描述正确的是? A. C不仅继承了B中的成员,同样也继承了A中的成员 B. C只继承了B中的成员 C. C只继承了A中的成员 D. C不能继承A或B中的成员 分数 1 作者 马俊 单位 兰州大学 Java中,以下关于抽象类和接口的说法错误的是? A. 抽象类在Java语言中表示的是一种继承关系,一个类只能使用一次继承。但是一个类却可以实现 多个接口。 B. 在抽象类中可以没有抽象方法 C. 实现抽象类和接口的类必须实现其中的所有方法,除非它也是抽象类。接口中的方法都不能被实 现 D. 接口中定义的变量默认是public static final 型,且必须给其初值,所以实现类中不能重新定 义,也不能改变其值 E. 接口中的方法都必须加上public关键字 分数 1 作者 马俊 单位 兰州大学 在Java中能实现多重继承效果的方式是? A. 内部类 B. 适配器 C. 接口 D. 多线程 分数 1 作者 马俊 单位 兰州大学 在Java语言中,关于this和super关键字说法正确的是? A. 都可以用在main()方法中 B. 都是指一个内存地址 C. 不能用在main()方法中 D. 意义相同 分数 1 作者 马俊 单位 兰州大学 Java语言中,以下关于覆盖重载说法正确的是? A. 覆盖只有发生在父类子类之间,而重载可以发生在同一个类中 B. 覆盖方法可以不同名,而重载方法必须同名 C. final修饰的方法可以被覆盖,但不能被重载 D. 覆盖重载是同一回事 分数 2 作者 马俊 单位 兰州大学 Java语言中关于使用接口以下哪个说法正确? A. 一个类只能实现一个接口 B. 实现一个接口必须实现接口的所有方法 C. 接口之间不能继承 D. 接口和抽象类是同一回事 分数 2 作者 马俊 单位 兰州大学 有以下Java程序,请问最后的t.printValue(10)会调用哪一个方法?(选择注释中编号) class Person { public void printValue(int i, int j) { } //1 public void printValue(int i){ } //2 } public class Teacher extends Person { public void printValue() { } //3 public void printValue(int i) {} //4 public static void main(String args[]){ Person t = new Teacher(); t.printValue(10); } } A. 1 B. 2 C. 3 D. 4 分数 2 作者 吴光生 单位 新余学院 Java语言中,类Student是类Person的子类,Student的构造方法中有一句:super(c),该语句意思是( )。 A. 调用类Student中定义的super()方法 B. 调用类Person中定义的super()方法 C. 调用类Person的构造方法 D. 语法错误 分数 2 作者 吕行军 单位 河北农业大学 Java中,关于接口描述错误的是。 A. 接口不能直接new实例化对象 B. 接口中所有的方法都是抽象方法 C. 接口的子类必须重写接口中所有的方法 D. 接口也是一种特殊的类 分数 2 作者 吕行军 单位 河北农业大学 Java中,多态的前提必须有 A. 封装 B. 面向对象 C. 继承 D. 类 分数 2 作者 吕行军 单位 河北农业大学 Java中,抽象方法定义正确的是 A. public static abstract void println(); B. public final abstract void println(); C. public abstract void println(); D. private abstract void println();
最新发布
11-03
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值