class Book extends Object {}
public class MainClass {
public static void main(String[] args) {
Object obja = new Book(); // 向上转型
Object objb = "hello"; // 向上转型
Book b = (Book) obja;
String s = (String) objb;
}
}
class Book extends Object {}
public class MainClass {
public static void main(String[] args) {
Book b = new Book();
String s = "Hello";
System.out.println(b);
System.out.println(b.toString());
System.out.println(s);
}
}
public class MainClass {
public static void main(String[] args) {
Object obj = new int[] {1, 2, 3};
System.out.println(obj); // [I@7852e922
if (obj instanceof int[]) {
int data[] = (int[]) obj;
for (int i = 0; i < data.length; i ++) {
System.out.println(data[i]);
}
}
}
}
除了数组外,接口也同样可以。
范例: Object类接收接口对象
interface A {
public void fun();
}
class B implements A {
public void fun() {
System.out.println("Hello World !");
}
}
public class MainClass {
public static void main(String[] args) {
Object obj = new B();
A a = (A) obj;
a.fun();
}
}
public class MainClass {
public static void main(String[] args) {
Link all = new Link();
all.add("A");
all.add("B");
all.add("C");
all.remove("A");
Object[] data = all.toArray();
for (int i = 0; i < data.length; i ++) {
System.out.println(data[i]);
}
}
}
interface Pet { // 定义一个宠物的标准
public String getName(); // 得到宠物的名字
public int getAge(); // 得到宠物的年龄
}
宠物商店与具体的宠物没有任何的关系,它只和宠物这个接口的标准有关。
范例: 定义宠物商店
class PetShop { // 一个宠物商店要保存有多个宠物信息
private Link pets = new Link(); // 保存的宠物信息
public void add(Pet pet) { // 上架
this.pets.add(pet);
}
public void delete(Pet pet) { // 下架
this.pets.remove(pet);
}
public Link search(String keyWork) {
Link result = new Link();
Object[] obj = this.pets.toArray();
for (int i = 0; i < obj.length; i ++) {
Pet p = (Pet) obj[i];
if (p.getName().contains(keyWork)) {
result.add(p);
}
}
return result;
}
}
下面就可以根据宠物的标准定义各个子类。
范例: 定义猫
class Cat implements Pet { // 如果不实现接口无法保存宠物信息
private String name;
private int age;
public Cat(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return this.name;
}
public int getAge() {
return this.age;
}
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (!(obj instanceof Cat))
return false;
Cat other = (Cat) obj;
if (age != other.age)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
public String toString() {
return "Cat [name=" + name + ", age=" + age + "]";
}
}
范例: 定义狗
class Dog implements Pet { // 如果不实现接口无法保存宠物信息
private String name;
private int age;
public Dog(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return this.name;
}
public int getAge() {
return this.age;
}
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (!(obj instanceof Cat))
return false;
Dog other = (Dog) obj;
if (age != other.age)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
public String toString() {
return "Dog [name=" + name + ", age=" + age + "]";
}
}
可以发现,有了接口以后子类的形式都非常的类似,这属于接口的特点。
范例: 测试类
public class MainClass {
public static void main(String[] args) {
PetShop shop = new PetShop();
shop.add(new Cat("小黑", 20));
shop.add(new Cat("皇受", 18));
shop.add(new Cat("吾皇", 14));
shop.add(new Dog("二哈", 6));
shop.add(new Dog("泰迪", 16));
shop.add(new Dog("阿拉斯加", 18));
shop.delete(new Dog("泰迪", 16));
Link all = shop.search("皇");
Object[] objs = all.toArray();
for (int i = 0; i < objs.length; i ++) {
System.out.println(objs[i]);
}
}
}