多态 学习

dome1

class Demo1_Polymorphic {
    public static void main(String[] args) {
        Cat c = new Cat();
        c.eat();

        Animal a = new Cat();               //父类引用指向子类对象
        a.eat();
    }
}
/*
* A:多态(polymorphic)概述
    * 事物存在的多种形态
* B:多态前提
    * a:要有继承关系。
    * b:要有方法重写。
    * c:要有父类引用指向子类对象。
* C:案例演示
    * 代码体现多态
*/
class Animal {
    public void eat() {
        System.out.println("动物吃饭");
    }
}

class Cat extends Animal {
    public void eat() {
        System.out.println("猫吃鱼");
    }
}

dome2

class Demo2_Polymorphic {
    public static void main(String[] args) {
        /*Father f = new Son();                 //父类引用指向子类对象
        System.out.println(f.num);

        Son s = new Son();
        System.out.println(s.num);*/

        Father f = new Son();
        //f.print();
        f.method();                         //相当于是Father.method()
    }
}
/*
成员变量
编译看左边(父类),运行看左边(父类)
成员方法
编译看左边(父类),运行看右边(子类)。动态绑定
静态方法
编译看左边(父类),运行看左边(父类)。
(静态和类相关,算不上重写,所以,访问还是左边的)
只有非静态的成员方法,编译看左边,运行看右边
*/
class Father {
    int num = 10;
    public void print() {
        System.out.println("father");
    }

    public static void method() {
        System.out.println("father static method");
    }
}

class Son extends Father {
    int num = 20;

    public void print() {
        System.out.println("son");
    }

    public static void method() {
        System.out.println("son static method");
    }
}

dome3

class Demo3_SuperMan {
    public static void main(String[] args) {
        Person p = new SuperMan();          //父类引用指向子类对象,超人提升为了人
                                            //父类引用指向子类对象就是向上转型
        System.out.println(p.name);
        p.谈生意();
        SuperMan sm = (SuperMan)p;          //向下转型
        sm.fly();

        /*
        基本数据类型自动类型提升和强制类型转换
        */
        int i = 10;
        byte b = 20;
        //i = b;                        //自动类型提升
        //b = (byte)i;                  //强制类型转换
    }
}

class Person {
    String name = "John";
    public void 谈生意() {
        System.out.println("谈生意");
    }
}

class SuperMan extends Person {
    String name = "superMan";

    public void 谈生意() {
        System.out.println("谈几个亿的大单子");
    }

    public void fly() {
        System.out.println("飞出去救人");
    }
}

原文地址:http://blog.51cto.com/357712148/2131934

时间: 2024-10-03 16:51:35

多态 学习的相关文章

C#中面向对象编程机制之多态学习笔记

C#的多态性: 我的理解是:同一个操作,作用于不同的对象时,会有不同的结果,即同一个方法根据需要,作用于不同的对象时,会有不同的实现. C#的多态包括:接口多态,继承多态. 其中继承多态又包括通过虚拟方法实现的多态和通过抽象方法实现的多态性 例如:基类动物都有吃的方法,但是不同的动物吃的东西就会不一样,例如狼吃肉,羊吃草,这样"吃"的这个方法就要在派生类里面重新实现以下,运行时,通过指向基类的指针,来调用实现派生类中的方法. 接下来举例实现多态性. 1. 接口多态性 把动物"

多态学习总结

多态就是指同一操作作用于不同的对象会产生不同的结果.在继承关系中,子类会自动继承父类中的方法,但有时父类的方法不能满足子类的需求,可以对父类的方法进行重写.重写有三点要求,1 要求子类的方法名,参数个数,参数类型必须与父类方法相同,2父类方法必须使用们virtual关键字修饰,被它修饰的方法称为虚方法,3 子类方法必须使用override的关键字修饰.需要注意的是,子类重写父类方法时,不能使用比父类中被重写的方法更严格的访问权限. 当子类重写父类的方法后,子类对象将无法直接访问父类被重写的方法,

JAVA多态学习4

好啦,说好的这一节要开讲接口了,嘿嘿,还是老样子,读者最好借助之前说的抽象类进行比较喔O(∩_∩)O哈哈~ 什么是接口? 接口就是给出一些没有内容的方法,封装到一起,到某个类要使用的时候,在根据具体情况把这些方法写出来. 接口的建立语法:interface 接口名{方法;} 语法:class 类名 implements 接口{ 方法; 变量; } 小结:接口是更加抽象的抽象的类,抽象类里的方法可以有方法体,接口里的所有方法都没有方法体.接口体现了程序设计的多态和高内聚低偶合的设计思想. 接口–注

C#面向对象的三大特征继承、封装、多态学习总结

1.基类和扩充类 (1)C#实现继承的方式:类继承和接口继承 (2)继承用冒号(:)表示.被继承的叫做父类或者基类,从基类继承的类叫扩充类,又叫派生类或子类.所有类的基类System.Object 声明方式:[访问修饰符]class 扩充类名称:基类名称 { } 若B继承自A,也可以使用强制转换操作将其转换为A对象.如:A b=(A)new B();此时,B对象将被限制为A对象的数据和行为,而无法再访问B对象中的数据和行为,除非A中的方法被B重载,将会访问B的方法.将B强制转换为A后,还可以将A

JAVA多态学习3

这一节我们来学习抽象类 抽象类–深入讨论 抽象类是java中一个比较重要的类. 1.用abstract关键字来修饰一个类时,这个类就是抽象类. 2.用abstract关键字来修饰一个方法时,这个方法就是抽象方法. 3.abstract抽象类中的abstract抽象方法是不允许在抽象类中实现的,一旦实现就不是抽象方法和抽象类了.abstract抽象方法只能在子类中实现. 4.抽象类中可以拥有实现方法. 5.抽象方法在编程中用的不是很多,但是在公司笔试时,却是考官比较爱问的知识点. 抽象类–注意事项

JAVA多态学习1

多态–概念 所谓多态.就是指一个引用(类型)在不同情况下的多种状态. 也能够理解成:多态是指通过指向父类的指针,来调用在不同子类中实现的方法. 实现多态有两种方式:1.继承.2.接口 这一次我们先来演示一下: 继承.方法覆盖.多态以及向上转型的内容 package polimorphic; public class Polimorphic { public static void main(String[] args) { //非多态演示 System.out.println("非多态演示:&q

多态学习续 抽象类和接口

抽象类abstract class 用关键字abstract修饰的类叫做抽象类,抽象类不能被实例化,即不能new出来一个抽象类的对象(实例). 抽象方法 用abstract关键字所修饰的方法叫做抽象方法. 抽象方法必须定义在抽象类中. 抽象方法有声明,无实现(没有花括号{},有花括号但是内容为空也是一种实现,空实现). 相对应的有声明有实现的方法可以叫做具体方法. 抽象类和抽象方法的关系 抽象方法必须定义在抽象类里面. 如果一个类包含了抽象方法,那么这个类一定要声明成抽象类. 如果某个类是抽象类

JAVA多态学习2

好啦,这里紧接着上次没说的向下转型,请读者结合上次讨论的向上转型的例子一起探讨(其实本次代码也有加上,放心). 我们这里希望从向下转型会出现的两种基本情况进行探讨 package downcasting; //动物类Animal父类 class Animal{ String name; int age; public String getName() { return name; } public void setName(String name) { this.name = name; } p

Java快速教程--vamei 学习笔记(基础篇)

链接:http://www.cnblogs.com/vamei/archive/2013/03/31/2991531.html java快速教程第1课 从HelloWorld到面向对象 学习网址:http://www.cnblogs.com/vamei/archive/2013/03/14/2958654.html java快速教程第2课 方法与数据成员 学习网址:http://www.cnblogs.com/vamei/archive/2013/03/25/2964430.html java快