JAVA 8 多态

面向对象的第三个特征,多态:

 
可以理解为事物存在的多种状态。
 
1,多态的体现:父类的引用指向了自己的子类,父类的引用可以接收子类对象。
Animal c1 = new Cat();
  c1.eat();
  function(new Dog());
  function(new Pig());
 
 public static void function (Animal c)
 {
  c.eat();
 }
 
 
2,多态的前提
        必须是类与类之间有关系,要么是继承,要么是实现。
        通常还有前提,存在覆盖。
3,多态的应用
 
4,多态的好处
        大大的提高了程序的扩展性
 
5,弊端
        提高了扩展性,但是只能使用父类的引用访问父类中的成员。
 
例子程序:
 
class Zx
{
 public static void main(String []arr)
 {
 
  Animal c1 = new Cat();
  c1.eat();
  function(new Dog());
  function(new Pig());
 }
 
 
 public static void function (Animal c)
 {
  c.eat();
 }
}
 
abstract class Animal
{
 public abstract void eat();
}
 
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 kanjia()
 {
  System.out.println("看见");
 }
}
 
 
class Pig extends Animal
{
 public void eat()
 {
  System.out.println("饲料");
 }
 public void gongDi()
 {
  System.out.println("公地");
 }
 
修改之前的
 
class Zx
{
 public static void main(String []arr)
 {
  Cat c = new Cat();
  Cat c1 = new Cat();
  function(c);
  function(new Dog());
  function(new Pig());
 }
 public static void function (Cat c)
 {
  c.eat();
 }
 
 public static void function (Dog c)
 {
  c.eat();
 }
 
 public static void function (Pig c)
 {
  c.eat();
 }
}
 
abstract class Animal
{
 public abstract void eat();
}
 
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 kanjia()
 {
  System.out.println("看见");
 }
}
 
 
class Pig extends Animal
{
 public void eat()
 {
  System.out.println("饲料");
 }
 public void gongDi()
 {
  System.out.println("公地");
 }
}
 
 
 
需求:
 Animal a= new Cat();
  a.eat();
想调用猫的特有方法,强制将父类的引用转成子类的类型,向下转型。
Cat c =(Cat) a;
c.catch.Mouse;
 
但是不可以
Animal a = new Animal();
Cat c = (Cat)a;
多态自始至终都是子类在变化。
 
 
关键字 instanceof:
判断 对象的引用是否指向某类型
 
Cat m = new Cat();
 
m instanceof Cat;   true
a  instanceof Dog; false
 
 
多态中成员函数(非静态)的特点: 
在编译时期:参阅引用类型所属的类中是否有调用的方法,如果有,则编译通过,否则失败。
在运行时期:查阅对象所属的类中是否有调用的方法。
成员函数在多态调用是,编译看左边,运行看右边。
 
在多态中,成员变量(和静态方法)特点:
无论编译还是运行,成员变量都参考左边。 
 
 
 
 
多态的应用举例:
 
 
class Zx
{
 public static void main(String []arr)
 {
 
  MainBoard mb = new MainBoard();
  mb.ran();
  mb.usePCI(null);
  mb.usePCI(new NetCard());
  mb.usePCI(new MuCard());
 
 }
}
 
class MainBoard
{
 public void ran()
 {
  System.out.println("main board ran");
 
 }
 public void usePCI(PCI P)
 /*接口型引用指向自己的子类对象,接口不可以创建对象,多态的应用之一,
  提高了程序的扩展性,降低了耦合性*/
 {
  if(P!=null)
  {
   P.open();
   P.close();
  }
 
 }
 
 
 
}
 
interface PCI
{
 public void open();
 public void close();
 
}
class NetCard implements PCI
{
 public void open()
 {
  System.out.println("net open");
 }
 public void close()
 {
  System.out.println("net close");
 }
}
 
class MuCard implements PCI
{
 public void open()
 {
  System.out.println("mu open");
 }
 public void close()
 {
  System.out.println("mu close");
 }
}
 
 
 
 
 
扩展性举例:
 
需求:数据库的操作
 
1,连接数据库
2,操作数据库
3,关闭数据库连接
 
 
下面写 UserInfoDao ui = new UserInfoByJDBC(); 即可
 
 
Object 类:
 
是所有对象的直接或者间接父类。
该类中定义的是所有所有对象都具备的功能。
 
class Demo //默认 extends Object
{
}
 
Object.squals(Object obj); //返回值为 true or false 当二者地址值相同为true
 
 
Object.toString();//返回该对象的字符表示   返回   “类名@地址值”地址值为16进制
Object.hanshCode //返回int   十进制的 地址值
 
 
 
posted @ 2015-07-25 15:14  hitz&x  阅读(209)  评论(0编辑  收藏  举报