java面向对象的三大特征:封装,继承,多态。
面向对象就是指的编程语言是面向对象的,也就是说它把东西实例化为一个对象,比如天空,人,动物等等等,而封装是把对象装起来,与外界互不干扰,继承就是一个类继承另一个类的属性,比如毛具有动物的属性,而多态性就是多种表现形式,具体来说,可以用"一个对外接口,多个内在实现方法"表示。举一个例子,计算机中的堆栈可以存储各种格式的数据,包括整型,浮点或字符。不管存储的是何种数据,堆栈的算法实现是一样的。针对不同的数据类型,编程人员不必手工选择,只需使用统一接口名,系统可自动选择。
根据学习,贴一个讲义练习:
/**
*多态的表现形式:父类的引用指向子类的对象。
*
*Animal a = new Cat();//类型提升,向上转型。
*
*多态的前提:必须是类与类之间有关系,要么继承,要么实现。并且子类要复写父类中的方法。
*
*多态的利弊: 利,大大提高程序的扩展性。
* 弊,只能使用父类的引用访问父类中的成员。
*
*成员函数在多态调用时。编译看左边,运行看右边。成员变量,无论编译或运行,都看左边。动态绑定。
*静态的都看左边。叫静态绑定。
*/
/*
abstract class Animal {
public abstract void eat();
}
class Cat extends Animal {
public void eat() {
System.out.println("eat fish");
}
public void cry() {
System.out.println("MIMI");
}
}
class Dog extends Animal {
public void eat() {
System.out.println("eat bone");
}
public void KanJia() {
System.out.println("KanJia");
}
}
public class TestDuoTai {
public static void main(String[] args){
function(new Dog());
}
public static void function(Animal a) {
a.eat();
if(a instanceof Cat){
Cat c = (Cat) a;
c.cry();
}else if(a instanceof Dog){
Dog d= (Dog)a;
d.KanJia();
}
}
}
*/
/**
*电脑的运行模拟。
*
*主板有自己的运行方法,可能用户还会对其他功能有需求
如需要上网,听音乐,看电影。这时主板上必须要有使用这些设备的功能。
这时可以用多态实现。所有功能的设备都实现特定的接口。
在主板上用这些接口的引用。
*/
//定义一个多功能设备的接口
interface PCI {
public abstract void open();
public abstract void closed();
}
//定义一个主板类。
class MainBoard {
public void run() {
System.out.println("MainBoard run");
}
//主板上有一个可以用多功能设备的方法
public void UsePCI(PCI p) {
if(p != null){//当不需要扩展功能时。PCI就不能使用。
p.open();
p.closed();
}
}
}
//多功能设备实现PCI接口
class NetCard implements PCI {
public void open(){
System.out.println("NetCard open");
}
public void closed(){
System.out.println("NetCard closed");
}
}
class SoundCard implements PCI {
public void open(){
System.out.println("SoundCard open");
}
public void closed(){
System.out.println("SoundCard closed");
}
}
//定义一个主类,模拟电脑。
public class TestDuoTai{
public static void main(String[] agrs){
MainBoard m = new MainBoard();
m.run();
m.UsePCI(null);
//m.UsePCI(new NetCard());
}
}