概念:同一个对象,在不同时刻表现出来的多种形态。
如果没有了继承,多态也失去了存在的前提。
public class Animal {public void say() {System.out.println("动物叫声");
}
}
public class Cat extends Animal {@Override
public void say() {System.out.println("猫叫````");
}
}
public class Dog extends Animal {@Override
public void say() {System.out.println("狗叫·····");
}
}
public class Test {public static void run(Animal animal){animal.say();
}
public static void main(String[] args) {Animal dog = new Dog();
dog.say();//执行的是dog类的方法(右边声明的是Animal对象 调用的是在子类重写过的say()方法)
Animal cat = new Cat();
Main.run(cat);//执行的是cat类的方法(实际传入的参数是Animal的实像对象)
}
}
多态在方法的参数上尤为多见,
1.左边类型是父类类型,右边new的是子类对象。
2.方法的参数定义的是父类类型,具体使用时数据是子类对象。
1成员变量:编译看左边,执行看左边。(变量习惯性的私有化这样就不需要就这些了)
2成员方法:编译看左边,执行看右边。(因为方法能重写)
好处:提高了程序的拓展性(定义方法的时候,使用父类类型作为参数,将来在使用的时候使用具体的子类参与操作)
弊端:不能使用子类的特有功能(成员只会映射到父类上)
1.向上转型: 子类类型赋值给父类类型。
2.向下转型: 父类类型赋值给子类类型。(需要强转)
修饰类:表示该类为抽象类,里面可以有抽象方法也可以没有
修饰方法:使用该关键字修饰的方法不能有具体的实现,存放该方法的类必须是抽象类。
不同:
1.抽象类需要使用abstract修饰。
2.抽象类不能够直接实例化。(构造方法一般用来子类访问父类数据初始化)
相同:
1.可以没有抽象方法。
2.可以有任何的其他方法。
3.可以有构造方法。
4.可以有成员变量。
抽象方法:只有方法的声明,没有方法的实现。这样的方法叫做抽象方法。子类继承抽象类必须实现抽象方法,除非子类是抽象类。
1,接口就是一种公共的数据规范,只要符合规范标准大家都可以通用。
2,java中接口更多的体现在对行为的抽象。
3,接口java中最高抽象的结构。
1.不用class,用interface修饰
2.实现用implement表示
3.接口不能实例化
4. jdk1.8以前接口中只能有抽象方法(默认修饰符:public abstract)
5. jdk8以后可以有默认方法、静态方法、私有方法
6. 成员变量只能是常量(默认修饰符:public static final)
7. 接口之间可以多继承。
(注意继承是“is a”的关系‘是不是’,接口是“like a”的关系‘像不像’)
抽象类是对事物的抽象,而接口是对行为的抽象
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧