zoukankan      html  css  js  c++  java
  • 多态(经典案例)

    案例:打印  矩形 和 圆形

    矩形: x(横坐标), y(纵坐标),length(长度), wid(宽度)

    圆形: x(横坐标), y(纵坐标), r(半径)


    思路:

    矩形 和 圆形 都有 共同的元素:x(横坐标), y(纵坐标)

    那么可以把x, y抽取出来 定义出一个 形状类作为父类,形状类中 包含这两个属性。

    定义一个 矩形类,继承 形状类。在自己类中扩展 length(长度), wid(宽度)属性

    定义一个 圆形类,继承 形状类。在自己类中扩展 r(半径) 属性

    写一个测试类,定义相应的方法 来实现功能。


    代码实现:

    1.定义一个形状类:

    public class Shape { // 形状类
        private int x;  // 描述横坐标
        private int y;  // 描述纵坐标
        
        public Shape() {
            super();
        }
        public Shape(int x, int y) {
            super();
    //        this.x = x;
    //        this.y = y;
            setX(x);   // 推荐这种写法,可以对x,y值做判断。只需在对应方法中,设置判断条件即可
            setY(y);
        }
        
        
        public int getX() {
            return x;
        }
        public void setX(int x) {
            this.x = x;
        }
        public int getY() {
            return y;
        }
        public void setY(int y) {
            this.y = y;
        }
        public void show() {
            System.out.println("横纵坐标:("+getX()+","+getY()+")");
        }   
    
    }

    2.定义一个矩形类

    // 矩形类
    public class Rect extends Shape {  
        private int len; //描述长度信息
        private int wid; //描述宽度信息
        
        public Rect() {
            super();
        }
        public Rect(int x, int y,int len, int wid) {
            super(x, y);
            setLen(len);
            setWid(wid);
            
        }
        public int getLen() {
            return len;
        }
        public void setLen(int len) {
            this.len = len;
        }
        public int getWid() {
            return wid;
        }
        public void setWid(int wid) {
            this.wid = wid;
        }
        @Override
        public void show() {
            System.out.println("我是个矩形");
            super.show();
            System.out.println("长度:"+getLen()+"宽度:"+getWid());
        }
    
    }

    3.定义一个圆形类

    // 定义 圆形类
    public class Circle extends Shape {
    
        private int r;  //描述半径
    
        public Circle() {
            super();
        }
    
        public Circle(int x, int y, int r) {
            super(x, y);
            setR(r);
        }
    
        public int getR() {
            return r;
        }
    
        public void setR(int r) {
            this.r = r;
        }
    
        @Override
        public void show() {
            
            System.out.println("我是个圆形");
            super.show();
            System.out.println("半径:"+getR());
            
        }
        
        
        
    }

    4.定义一个测视类,并编写对应的方法来实现功能

    package com.monkey1025;
    
    public class Test {
        // 自定义一个方法:最好定义成静态方法,无需new对象,使用 类名.静态方法()名 的方式调用
        // 要求:该方法既能打印 矩形 又能 打印圆形,具体图形 由 参数传入
       
    public static void draw(Shape s) { // 让父类Shape作为形参,这样的话 实参既能是本类的对象,又可以传递子类的对象 // Shape类型的s 在编译阶段只能调用 Shape类型 自己的show()方法 // 但是Shape的任意一个子类对show()方法进行了重写,在运行阶段则调用子类自己重写的方法 s.show(); } public static void main(String[] args) { // Test.draw(s); 该方法形参需要的是 Shape类型的引用,参既能是本类的对象,又可以传递子类的对象 // 创建矩形类的匿名对象 作为实参传递给形参 // 其实相当于: Shape s = new Rect(1,2,3,4); 形成了多态 Test.draw(new Rect(1,2,3,4)); System.out.println("-----------------------------"); // 创建圆形类的匿名对象 作为实参传递给形参 // 其实相当于: Shape s = new Circle(5,6,7); 形成了多态 Test.draw(new Circle(5,6,7)); } }

     多态的好处:

  • 相关阅读:
    自己用Django搭建的blog和用户权限
    python实现简单爬虫功能
    异步任务队列Celery在Django中的使用
    Django添加全文搜索功能入门篇
    Django 最好的缓存memcached的使用
    Django中添加富文本编辑器
    Python之Django 访问静态文件
    Django中url的逆向解析 -> Reverse resolution of URLs
    python(Django之html模板继承)
    IOS7以后无需自定义,改变UITabbarItem的图片文字颜色
  • 原文地址:https://www.cnblogs.com/penguin1024/p/11735814.html
Copyright © 2011-2022 走看看