本文已参与「新人创作礼」活动,一起开启掘金创作之路。
一、Java多态Object类
在JDK中提供了一个Object类,它是所有类的父类,即每个类都直接或间接继承自该类。
案例:
//定义animal类
class Animal13 {
//定义动物叫的方法
void shout() {
System.out.println("动物叫……");
}
}
//定义测试类
class ExampleA13 {
public static void main(String[] args) {
Animal13 animal13 = new Animal13(); //创建 animal类对象
System.out.println(animal13.toString()); //调用toString()方法并打印
}
}
二、Java多态toString()方法
语法:
getClass().getName()+"@"+Integer.toHexstring(hashCode());
- getClass().getName()代表返回对象所属类的类名。
- hashCode()代表返回该对象的哈希值。
- Integer.toHexstring(hashCode())代表将对象的哈希值用16进制表示。
案例:
//定义 Animal类——重写 Object的 toString()方法
class Animal14 {
//重写 Object类的 toString()方法
public String toString(){
return "I am an animal";
}
}
//定义测试类
class ExampleA14 {
public static void main(String[] args) {
Animal14 animal14 = new Animal14(); //创建 animal类对象
System.out.println(animal14.toString()); //调用toString()方法并打印
}
}
三、Java多态匿名内部类
案例1:
//匿名内部类
interface Animal15 {
void shout();
}
//定义测试类
class ExampleA15{
public static void main(String[] args) {
//定义一个内部类 Cat实现 Animal接口
class Cat implements Animal15 {
public void shout(){
System.out.println("喵喵……");
}
}
animalShout(new Cat());//调用 animalShout()方法并且传入 Cat对象
}
//定义静态方法 animalShout()
public static void animalShout(Animal15 an){
an.shout();//调用传入对象 an的 shout()方法
}
}
格式:
new 父类(参数列表)或 父类接口(){
//匿名内部类实现部分
}
案例2:
//匿名内部类
interface Animal16 {
void shout();
}
//定义测试类
class ExampleA16{
public static void main(String[] args) {
//定义匿名内部类作为参数传递给 animalShout()方法
animalShout(new Animal16(){
public void shout(){
System.out.println("喵喵……");
}
});
}
//定义静态方法 animalShout()
public static void animalShout(Animal16 an){
an.shout();//调用传入对象 an的 shout()方法
}
}
分步骤编写匿名内部类
①在调用 animalShout()方法时,在方法参数位置上写上 new Animal(){},这相当于创建了一个实例对象,并将对象作为参数传给 animalShout()方法。在 new Animal()后面有一对大括号,表示创建的对象为Animal的子类实例,该子类是匿名的。
animalShout(new Animal(){});
②在大括号中编写匿名子类的实现代码
animalShout(new Animal(){
public void shout(){
System.out.println("喵喵……");
}
});
加深对接口类的认识
案例3:
//定义 PCI接口
interface PCI {
void start();
void stop();
}
//定义 NetWorkCard类实现 PCI接口
class NetWorkCard implements PCI {
@Override
public void start() {
System.out.println("Send...");
}
@Override
public void stop() {
System.out.println("NetWork Stop");
}
}
//定义 SoundCard类实现 PCI接口
class SoundCard implements PCI {
@Override
public void start() {
System.out.println("Du do...");
}
@Override
public void stop() {
System.out.println("Sound Stop");
}
}
//定义 MainBoard(主板)类
class MainBoard {
//定义一个 userPCICard方法,接收 PCI类型的参数
public void userPCICard(PCI pci) {
pci.start(); //调用传入对象的方法
pci.stop();
}
}
//定义 Assembler(汇编程序)类
class Assembler {
public static void main(String[] args) {
MainBoard mb = new MainBoard(); //创建实例对象
NetWorkCard nc = new NetWorkCard();
mb.userPCICard(nc);
//调用 MainBoard对象的 userPCICard()方法,将nc作为参数传入
SoundCard sc = new SoundCard();
mb.userPCICard(sc);
}
}