多态
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;
}
}