标签:弊端 分析 toc 项目 编译 需要 顺序 数据类型 home
D:案例演示
案例:
class Demo4_Animal {
public static void main(String[] args) {
//Cat c1 = new Cat();
//c1.eat();
method(new Cat());
method(new Dog());
//Animal a = new Cat(); 开发的是很少在创建对象的时候用父类引用指向子类对象,直接创建子类对象更方便,可以使用子类中的特有属性和行为
}
//Cat c = new Dog();狗是一只猫,这是错误的
/public static void method(Cat c) {
c.eat();
}
public static void method(Dog d) {
d.eat();
}/
//如果把狗强转成猫就会出现类型转换异常,ClassCastException
public static void method(Animal a) { //当作参数的时候用多态最好,因为扩展性强
//关键字 instanceof 判断前边的引用是否是后边的数据类型
if (a instanceof Cat) {
Cat c = (Cat)a;
c.eat();
c.catchMouse();
}else if (a instanceof Dog) {
Dog d = (Dog)a;
d.eat();
d.lookHome();
}else {
a.eat();
}
}
}
class Animal {
public void eat() {
System.out.println("动物吃饭");
}
}
class Cat extends Animal {
public void eat() {
System.out.println("猫吃鱼");
}
public void catchMouse() {
System.out.println("抓老鼠");
}
}
class Dog extends Animal {
public void eat() {
System.out.println("狗吃肉");
}
public void lookHome() {
System.out.println("看家");
}
}
class Fu {
public void show() {
System.out.println("fu show");
}
}
class Zi extends Fu {
public void show() {
System.out.println("zi show");
}
public void method() {
System.out.println("zi method");
}
}
class Test1Demo {
public static void main(String[] args) {
Fu f = new Zi();
f.method();//编译看左边,左边的父类中没有这个方法,所以编译都通不过
f.show();
}
}
class A {
public void show() {
show2();
}
public void show2() {
System.out.println("我");
}
}
class B extends A {
public void show2() {
System.out.println("爱");
}
}
class C extends B {
public void show() {
super.show();
}
public void show2() {
System.out.println("你");
}
}
public class Test2DuoTai {
public static void main(String[] args) {
A a = new B();
a.show();//爱//父类引用指向子类,但是show方法没有重写,所以不构成多态,只是继承,所以调用父类的show方法,里面还有个
show2方法,show2方法重写了,构成了重写,有了多态,所以要看右边的,所以调用子类的show2方法,而不是父类的show2,所以打印出子类的爱,下同
B b = new C();
b.show();//你//编译看右边,然后子类的show方法调用父类的show,它从它爷爷那里拿到show方法,里面又有show2方法,同样构成了多态,运行看右边子类,那就是C类中的打印你字
}
}
/*
abstract class Demo {
//public static abstract void print(); //错误: 非法的修饰符组合: abstract和static
//public final abstract void print(); //错误: 非法的修饰符组合: abstract和final
private abstract void print(); //错误: 非法的修饰符组合: abstract和private
}
B:案例演示
}/
public abstract void print();
}
class Demo /extends Object*/ implements Inter { //一个类不写继承任何类,默认继承Object类
public void print() {
//num = 20;
System.out.println(num);
}
public Demo() {
super();
}
}
补充: 错误: 接口方法不能带有主体,,抽象方法也是,错误: 抽象方法不能有主体,即不能有{},
错误: Coder不是抽象的, 并且未覆盖Skill中的抽象方法skill(),,接口中的方法必须全部重写,
抽象类中的抽象方法必须重写,其他方法可以不重写
A:成员区别
B:关系区别
C:设计理念区别
标签:弊端 分析 toc 项目 编译 需要 顺序 数据类型 home
原文地址:http://www.cnblogs.com/itlyh/p/6024676.html