Java面试题目之备忘十(多态)

本文深入探讨Java中的多态概念,包括父类引用指向子类对象的实例、运行时多态的特点,以及如何通过方法重写实现多态。并通过具体代码示例展示了多态的应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

多态

1 关于多态:父类或者接口类型的引用指向子类或者实现该接口的类的对象

import java.util.Random;

public class PoliTest
{

 public static void main(String[] args)
 {
 
  Parent2 p = new Child2();
  
  p.doSomething();
   
 }

}


class Parent2
{
 public void doSomething()
 {
  System.out.println("Parent");
 }
}

class Child2 extends Parent2
{
 @Override
 public void doSomething()
 {
  System.out.println("Child2");
 }
}

 

 

 2 多态是运行时行为,不是编译时行为。

import java.util.Random;

public class PoliTest
{

 public Parent2 generate()
 {
  Random random = new Random();

  int number = random.nextInt(3);
  switch(number)
  {
   case 0 :
    return new Child2();
   case 1 :
    return new Child3();
   case 2 :
    return new Child4();
  }
  return null;
 }

 public static void main(String[] args)
 {
  PoliTest pt = new PoliTest();

  Parent2 p2 = pt.generate();

  p2.doSomething();
   
 }

}


class Parent2
{
 public void doSomething()
 {
  System.out.println("Parent");
 }
}

class Child2 extends Parent2
{
 @Override
 public void doSomething()
 {
  System.out.println("Child2");
 }
}

class Child3 extends Parent2
{
 @Override
 public void doSomething()
 {
  System.out.println("Child3");
 }
}

class Child4 extends Parent2
{
 @Override
 public void doSomething()
 {
  System.out.println("Child4");
 }
}

 

 3 java中通过方法重写与方法重载来实现多态?是不对的。
方法重载是编译时就确定了,而多态是运行时确定的。
Thinking in java在多态那章也有描述;

 

import java.util.Arrays;

public class ArrayTest
{

 /**
  * @param args
  */
 public static void main(String[] args)
 {
  char[] ch1 = new char[2];
  ch1[0] = 'a';
  ch1[1] = 'b';
  
  char[] ch2 = new char[2];
  ch2[0] = 'a';
  ch2[1] = 'b';
  
  System.out.println(ch1.equals(ch2));

 }

}

 问题:上述程序输出什么?flase

import java.util.Arrays;

public class ArrayTest
{

 /**
  * @param args
  */
 public static void main(String[] args)
 {
  char[] ch1 = new char[2];
  ch1[0] = 'a';
  ch1[1] = 'b';
  
  char[] ch2 = new char[2];
  ch2[0] = 'a';
  ch2[1] = 'b';
  
  String s1 = new String(ch1);
  String s2 = new String(ch2);
  
  System.out.println(s1.equals(s2));
  
 }

}

 
问题:上述代码输出什么?true

public class ArrayTest
{

 /**
  * @param args
  */
 public static void main(String[] args)
 {
  char[] ch1 = new char[2];
  ch1[0] = 'a';
  ch1[1] = 'b';
  
  char[] ch2 = new char[2];
  ch2[0] = 'a';
  ch2[1] = 'b';
  
  boolean result = Arrays.equals(ch1,ch2);
  
  System.out.println(result);
  
 }

}

 
问题:上述代码输出什么?true

单态模式?

 

public class Singleton
{
//	private static Singleton sigleton = new Singleton();
//	
//	private Singleton()
//	{
//		
//	}
//	
//	public static Singleton getInstance()
//	{
//		return sigleton;
//	}
	
	private static Singleton singleton;
	
	private Singleton()
	{
		
	}
	
	public static Singleton getInstance()
	{
		if(null == singleton)
		{
			singleton = new Singleton();
		}
		
		return singleton;
	}

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值