「多态java难题」java多态编程题
本篇文章给大家谈谈多态java难题,以及java多态编程题对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
java的多态问题。
抽象是面向对象领域中对类(接口)进行的泛化,如由多个类抽象出一个共同的父类(接口),也可以指由多个对象归纳为一个类。
多态是面对同一种操作(方法),不同的对象执行时具有不同的结果。多态分为静态多态和动态多态,静态多态是在程序预编译期间确定对象与操作(方法)的关系,如方法的重载,动态多态是在程序运行期间确定对象与操作(方法)的关系。
一个静态多态的Java程序如下:
public class Main {
public static void main(String[] args){
System.out.println(strcat("hello,", "world")); //程序预编译期间就能确定调用哪个方法
System.out.println(strcat("hello,", 1)); //程序预编译期间就能确定调用哪个方法
}
public static String strcat(String s1, String s2) {
return s1 + s2;
}
public static String strcat(String s1, int s2) {
return s1 + String.valueOf(s2);
}
public static String strcat(int s1, String s2) {
return String.valueOf(s1) + s2;
}
public static String strcat(int s1, int s2) {
return String.valueOf(s1) + String.valueOf(s2);
}
}
运行结果:
hello,world
hello,1
一个动态多态的Java程序如下:
//接口:表示人类的行为
interface Behavor {
void learn();
}
//子类:学生类
class Student implements Behavor {
//实现父接口的行为
@Override
public void learn() {
System.out.println("学生主要通过上课获得知识");
}
}
//子类:学生类
class Teacher implements Behavor {
//实现父接口的行为
@Override
public void learn() {
System.out.println("教师主要通过自学获得知识");
}
}
public class Main {
public static void main(String[] args){
Behavor b = null;
b = new Student();
b.learn(); //程序运行时才能确定调用哪个子类的方法
b = new Teacher();
b.learn(); //程序运行时才能确定调用哪个子类的方法
}
}
运行结果:
学生主要通过上课获得知识
教师主要通过自学获得知识
java多态性问题 两个。在线等,急。
这里面用到了多态,可能都没人注意到,我在给你说说多态吧,一种是同类方法的重载,一种是子类重写父类方法。这两种都是多态,当然,你也可以运用重写和重载来组织起子类和父类间复杂多态性,其次多态只是一种概念。
如果分析你这些代码,可以看到的是代码里面用到继承了,所以我们在研究是不是多态时,首先应该知道JAVA对于继承的子类对象和父类对象的处理顺序。JAVA会通过子类--父类--父类的父类--。。。
以此类推,直到找到调用的方法为止,而这通常是指对象的构造类型,也就是NEW关键字后面的类型,而不是指声明变量时的类型。也可以说Tipc reply=new Reply();和Replyreply=new Reply();在多态性中是一样的,因为如果Tipc和Reply两个类都继承自Tip类,并且都重写了getInfo()这个方法,那么不管你声明的是子类还是父类类型的变量,这都是太态,因为事情的本质是JAVA会调用new Reply()对象的getInfo()方法,所以声明的类型是无关的。
当子类重写过父类方法时,就已经产生多态了,不管你这里面的操作是否完全一样。就拿getInfo()这个方法来说,他已经存在多态性了。
以下是我的代码,你可以Copy回去运行下,看看输出结果就知道了。
public class Test
{
public static void main(String[] args)
{
Tip tip=new Tip();
Tipc tipc=new Tipc();
tipc.setTitle("我会用继承了");
tipc.setContent("如题");
tipc.setPublishTime("2010-10-1 12:01:10");
tip.find(tipc);
Reply reply=new Reply();
reply.setTitle("Re:我会用继承了");
reply.setContent("我早会了");
reply.setPublishTime("2010-10-1 12:03:12");
tip.find(reply);
Tip reply1=new Reply();
reply1.setTitle("Re:我会用继承了");
reply1.setContent("我很多年以前就会了");
reply1.setPublishTime("2010-10-1 12:06:12");
tip.find(reply1);
}
}
class Tip
{
private String title;
private String content;
private String publishTime;
private int id;
public void getInfo()
{
System.out.println("===帖子信息===");
System.out.println("帖子标题:"+title);
System.out.println("帖子内容:"+content);
System.out.println("发表时间:"+publishTime);
System.out.println("这是父类,没有多态");
}
public String getTitle()
{
return title;
}
public void setTitle(String title)
{
this.title=title;
}
public String getContent()
{
return content;
}
public void setContent(String content)
{
this.content=content;
}
public String getPublishTime()
{
return publishTime;
}
public void setPublishTime(String publishTime)
{
this.publishTime=publishTime;
}
public void find(Tip p)
{
p.getInfo();
}
}望采纳,谢谢。
JAVA多态经典例题
System.out.println("1--" + a1.show(b));
a1是A类引用指向A类对象,不存在多态,一定调用A类方法。A类方法有两个show(D)和show(A),b是B类引用无法转换为D类引用,但可以转换为A类引用,因此调用show(A),输出A and A。
System.out.println("2--" + a1.show(c));
输出A and A,原因同上。
System.out.println("3--" + a1.show(d));
调用show(D),输出A and D。
System.out.println("4--" + a2.show(b));
a2是A类引用指向B类对象,可能存在多态。b是B类引用无法转换为D类引用,但可以转换为A类引用,因此调用show(A),而B类重写了show(A),因此调用的是重写后的show(A),输出B and A。
System.out.println("5--" + a2.show(c));
同上,C类引用无法转换为D类引用,但可以转换为A类引用,因此调用show(A),输出B and A。
System.out.println("6--" + a2.show(d));
调用show(D),show(D)又调用父类即A类的show(D),输出A and D
System.out.println("7--" + b.show(b));
b是B类引用指向B类对象,不存在多态,一定调用B类方法。B类一共有三个方法:重写自A类的show(A)和show(D),以及新定义的show(B)。show(b)调用show(B)方法,输出B and B
System.out.println("8--" + b.show(c));
C类继承自B类,也调用show(B)方法,输出B and B
System.out.println("9--" + b.show(d));
调用show(D),show(D)又调用父类即A类的show(D),输出A and D
多态java难题的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java多态编程题、多态java难题的信息别忘了在本站进行查找喔。