「多态java难题」java多态编程题

博主:adminadmin 2023-03-19 06:59:06 484

本篇文章给大家谈谈多态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难题的信息别忘了在本站进行查找喔。