zoukankan      html  css  js  c++  java
  • 多态1

    package c;
    
    
    
        /*
        面向对象的三大特征:
            1. 封装
            2. 继承。
            3. 多态
    
        多态:一个对象具备多种形态。(父类的引用类型变量指向了子类的对象)
    
        或者是接口 的引用类型变量指向了接口实现类的对象)
    
        多态的前提:必须存在继承或者实现 关系。
    
            动物  a  = new   狗();
    
        多态要注意 的细节:
            1.  多态情况下,子父类存在同名的成员变量时,访问的是父类的成员变量。
            2.  多态情况下,子父类存在同名的非静态的成员函数时,访问的是子类的成员函数。
            3.  多态情况下,子父类存在同名的静态的成员函数时,访问的是父类的成员函数。
    
            4.  多态情况下,不能访问子类特有的成员。
    
        总结:多态情况下,子父类存在同名的成员时,访问的都是父类的成员,除了在同名非静态函数时才是访问子类的。
    
        编译看左边,运行不一定看右边。
    
        编译看左边:java编译器在编译的时候,会检查引用类型变量所属的类是否具备指定的成员,如果不具备马上编译报错。
    
    
        */
    
    
        //动物类
        abstract class Animal{
    
            String name;
    
            String  color = "动物色";
    
            public Animal(String name){
                this.name = name;
            }
    
            public abstract void run();
    
            public static void eat(){
                System.out.println("动物在吃..");
            }
    
        }
    
        //老鼠
        class  Mouse extends Animal{
    
            String color = "黑色";
    
            public Mouse(String name){
                super(name);
            }
            
            public  void run(){
                System.out.println(name+"四条腿慢慢的走!");
            }
    
            public static void eat(){
                System.out.println("老鼠在偷吃..");
            }
    
            //老鼠特有方法---打洞
            public void dig(){
                System.out.println("老鼠在打洞..");
            }
        }
    
    
    
        class Fish extends Animal {
    
            public Fish(String name){
                super(name);
            }
            
            
            public  void run(){
                System.out.println(name+"摇摇尾巴游..");
            }
        }
    
        public class duotai {
            public static void main(String[] args) 
            {
                /*
                Mouse m = new Mouse("老鼠");
                System.out.println(m.color);
                
                //多态: 父类的引用类型变量指向子类的对象
                */
                Animal a = new Mouse("老鼠");
                //a.dig();//不能指向子类特有的成员
                a.eat();
            }    
        }

    多态的应用

    /*
    多态的应用:
      1. 多态用于形参类型的时候,可以接收更多类型的数据 。
      2. 多态用于返回值类型的时候,可以返回更多类型的数据。
    
    
    
    多态的好处: 提高了代码的拓展性。
    
    需求1: 定义一个函数可以接收任意类型的图形对象,并且打印图形面积与周长。
    */
    
    //图形类
    abstract class MyShape{
    
        public abstract void getArea();
    
        public abstract void getLength();    
    }
    
    
    
    class Circle extends MyShape{
    
        public static final double PI = 3.14;
    
        double r;
    
        public Circle(double r){
            this.r =r ;    
        }
    
        public  void getArea(){
            System.out.println("圆形的面积:"+ PI*r*r);
        }
    
        public  void getLength(){
            System.out.println("圆形的周长:"+ 2*PI*r);
        }
    }
    
    
    class Rect  extends MyShape{
    
        int width;
    
        int height;
    
        public Rect(int width , int height){
            this.width = width;
            this.height = height;
        }
    
        public  void getArea(){
            System.out.println("矩形的面积:"+ width*height);
        }
    
        public  void getLength(){
            System.out.println("矩形的周长:"+ 2*(width+height));
        }
    }
    
    
    
    class Demo12 {
    
        public static void main(String[] args) 
        {
            /*
            //System.out.println("Hello World!");
            Circle c = new Circle(4.0);
            print(c);
    
            Rect r = new Rect(3,4);
            print(r);
            */
    
            MyShape m = getShape(0); //调用了使用多态的方法,定义的变量类型要与返回值类型一致。
            m.getArea();
            m.getLength();
            
    
        }
    
    
        //需求1: 定义一个函数可以接收任意类型的图形对象,并且打印图形面积与周长。
        public static void print(MyShape s){ // MyShpe s = new Circle(4.0);
            s.getArea();
            s.getLength();
        }
    
    
        // 需求2: 定义一个函数可以返回任意类型的图形对象。
        public static MyShape  getShape(int i){
            if (i==0){
                return new Circle(4.0);
            }else{
                return new Rect(3,4);
            }
        }
    
    
    }
  • 相关阅读:
    office 2013激活
    MVC interview question
    javaScript true /false
    17 ways to Optimize VBA Code for FASTER Macros
    50 Excel VBA Oral Interview Questions
    How to compare two worksheets in a workoo
    Access窗体传值
    How to Convert a workbook/WorkSheet to PDF
    01_js数据类型
    02_js两个变量交换值
  • 原文地址:https://www.cnblogs.com/huodaihao/p/9157360.html
Copyright © 2011-2022 走看看