面向对象(二)


 
  1. 面向对象的特征之三:多态
  2. 多态机制是面向对象程序设计的一个重要特征
  3. 多态的特点是采用同名的方式,根据调用方法时传送的参数的多少以及传送参数类型的不同,调用不同的方法,这样对于类的编制而言,可以采用同样的方法获得不同的行为特征
  4. 多态性可以分为编译时多态运行时多态
  5.          编译时多态:表现为方法名相同参数列表不同(重载)

             运行时多态(对象的多态性):程序运行的时候判断到底是哪个类(父类还是      子类的),这其实就是子类对象和父类对象的相互转化关系

             向上转型   父类 父类对象 = new 子类的实例         自动完成

             向下转型   子类 子类对象 = (子类)父类的实例  强制完成

     

     

  6. 如何实现多态
  7. 1.子类继承父类

    2.子类重写父类的方法

    3.编写方法时,使用父类作为形参类型

    4.将子类的对象作为实参传递给该方法

    5.运行时,根据实际创建的对象类型动态决定使用哪个方法

     

    实现多态的三个条件:

    1.要有重写

    2.要有继承

    3.父类的引用指向子类的对象(实例)

     

    多态的应用:

    public class TestPoly03{

    public static void main(String[] args){

        Breeder b=new Breeder();

    Animal animal=new Animal();

    Cat cat=new Cat();

    Dog dog=new Dog();

    Elephants elephants=new Elephants();

     

    Food food=new Food();

    Fish fish=new Fish();

    Meat meat=new Meat();

    Banana banana=new Banana();

     

    b.feed(animal,food);

    b.feed(cat,fish);

    b.feed(dog,meat);

    b.feed(elephants,banana);

    }

    }

    class Breeder{

    public void feed(Animal animal,Food food){

        animal.eat(food);

    }

    }

    class Animal{

    public void eat(Food food){

        System.out.println("动物吃"+food.getFood());

    }

    }

    class Cat extends Animal{

    public void eat(Food food){

        System.out.println("猫吃"+food.getFood());

    }

    }

    class Dog extends Animal{

    public void eat(Food food){

        System.out.println("狗吃"+food.getFood());

    }

    }

    class Elephants extends Animal{

    public void eat(Food food){

        System.out.println("大象吃"+food.getFood());

    }

    }

    class Food{

    public String getFood(){

        return "食物";

    }

    }

    class Fish extends Food{

    public String getFood(){

        return "鱼";

    }

    }

    class Meat extends Food{

    public String getFood(){

        return "肉";

    }

    }

    class Banana extends Food{

    public String getFood(){

        return "香蕉";

    }

    }

     

     

     

  8. ==”与Object类的equals方法
  9. 1.等号可以比较基本类型和引用类型,等号比较的是值,特别是比较引用类型,比较的是引用的内存地址。

    2.equals比较两个对象是否相等

     

     

  10. Object类的toString方法
  11. 1.Object类的toString方法返回的是对象的  名称@哈希码

    2.String类的toString方法返回的是自身

    3.基本数据类型的包装类的toString方法返回的是自身

    4.数组和集合的toString方法返回的是自身的值

     

  12. 内部类
  13. 实例内部类:

    1.创建实例内部类,外部类的实例必须已经创建

    2.实例内部类会持有外部类的引用

    3.实例内部不能定义static成员,使能定义实例成员

    静态内部类

    1.静态内部类不会持有外部的类的引用,创建时可以不用创建外部类

    2.静态内部类可以访问外部的静态变量,如果访问外部类的成员变量必须通过外部类的实例访问

    局部内部类

    1.局部内部类是在方法中定义的,它只能在当前方法中使用。和局部变量的作用一样

    2.局部内部类和实例内部类一致,不能包含静态成员

    匿名内部类:

    十一种特殊的内部类,没有名字

     

     

  14. 访问权限修饰符:
  15. public:任何类都能访问

    protected:本类  同包 子类可访问

    default:同包 本类可访问

    private:只能本类访问

     

      

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值