• No2_3.接口继承多态_Java学习笔记_多态



    ***多态***
    1.多态性:通常使用方法的重载(Overloading)和重写(Overriding)实现类的多态;
    2.重写之所以具有多态性,是因为父类的方法在子类中被重写,方法名相同,实现功能不同。
    3.方法重载:是指在一个类中出现多个方法名相同,但参数或参数类型不同的方法;
    4.java执行重载方法时,根据参数个数和类型区执行哪一个方法;
    5.重载的方法之前不一定必须有联系,但为了提高程序的可读性,一般只重载功能相似的方法;
    6.方法重载时,方法返回值类型不能作为区分方法的标志;

    多态:

      1 /**
      2  * 
      3  * @author 作者:sunshine
      4  * @date 创建时间:2016年7月4日 下午5:22:19
      5  */
      6 
      7 class Calculate{
      8     final float PI=3.14f;
      9     //求圆形的面积
     10     public float getArea(float r){
     11         float area=PI*r*r;
     12         return area;
     13     }
     14     //求矩形的面积
     15     public float getArea(float w,float l){
     16         float area=w*l;
     17         return area;
     18     }
     19     //画任意形状的图形
     20     public void draw(int n){
     21         System.out.println("画"+n+"个任意形状的图形。");
     22     }
     23     public void draw(String shape){
     24         System.out.println("画一个"+shape+"形状的图形。");
     25     }
     26 }
     27 
     28 /**********
     29  *1、抽象类声明时要使用abstract关键字来定义,为继承而存在;抽象类不能创建对象;
     30  *2、抽象类里的抽象方法不能有方法体, 只能是方法的声明,例如 abstract void AMethod()。
     31  *3、如果一个类继承于一个抽象类,则子类必须实现父类的抽象方法。
     32  *4、如果子类没有实现父类的抽象方法,则必须将子类也定义为abstract类。
     33  */
     34 abstract class Shape{
     35     public String getName(){
     36         return this.getClass().getSimpleName();        //不懂这儿,书上解释:使用反射机制获得"类"名称
     37     }
     38     public abstract double getArea();        //获得图形的名称
     39 } 
     40 
     41 class Circle extends Shape{
     42     private double radius;
     43     public Circle(double radius){
     44             this.radius=radius;
     45     }
     46 
     47     @Override
     48     public double getArea(){
     49         return Math.PI*Math.pow(radius, 2);
     50     }    
     51 }
     52 class Rectangle extends Shape{
     53     private double length;
     54     private double width;
     55     public Rectangle(double length,double width){
     56         this.length=length;
     57         this.width=width;        
     58     }
     59 
     60     @Override
     61     public double getArea(){
     62         return length*width;
     63     }    
     64 }
     65 
     66 //简单的汽车销售商场
     67 abstract class Car{
     68     public abstract String getInfo();
     69 }
     70 class BMW extends Car{
     71     @Override
     72     public String getInfo(){
     73         return "It's a BMW!";
     74     }
     75 }
     76 class Benz extends Car{
     77     @Override
     78     public String getInfo(){
     79         return "It's a Benz!";
     80     }
     81 }
     82 //创建一个CarFactory类,定义一个静态方法getCar(),可以根据用户指定的车型来创建类
     83 class CarFactory {
     84     public static Car getCar(String name){
     85         if (name.equalsIgnoreCase("BMW")){
     86             return new BMW();
     87         } else if (name.equalsIgnoreCase("Benz")){
     88             return new Benz();
     89         }else {
     90             return null;
     91         }
     92     }
     93 }
     94 
     95 
     96 
     97 public class Hello3Polymorphism {
     98 
     99     public static void main(String[] args) {
    100         // TODO Auto-generated method stub
    101         System.out.println("开始学习多态喽~~");
    102         
    103         //多态:方法重载 ,同一个类多个同名方法
    104         System.out.println("
    方法重载 ,同一个类多个同名方法:");
    105         Calculate cal=new Calculate();
    106         float r=5.20f;
    107         float w=8,l=4;
    108         float areaR=cal.getArea(w, l);    //精度不够准哟
    109         float areaC=cal.getArea(r);
    110         System.out.println("半径为"+r+"的圆的面积是:"+areaC);
    111         System.out.println("长为"+l+"宽为"+w+"的长方形的面积是"+areaR);
    112         
    113         int n=5;
    114         String star="星星";
    115         cal.draw(n);
    116         cal.draw(star);
    117         
    118         //计算几何图形的面积
    119         System.out.println("
    计算几何图形的面积:");
    120         Circle circle=new Circle(1);
    121         //System.out.println("图形的名称是:"+circle.getArea());
    122         System.out.println("图形的面积是:"+circle.getName());
    123         Rectangle rectangle=new Rectangle(3,5);
    124         //System.out.println("图形的名称是:"+rectangle.getArea());
    125         System.out.println("图形的面积是:"+rectangle.getName());
    126         
    127         
    128         //简单的汽车销售商场
    129         System.out.println("
    简单的汽车销售商场");
    130         System.out.println("顾客要购买BMW:");
    131         Car bwm=CarFactory.getCar("BMW");
    132         System.out.println("提取汽车:"+bwm.getInfo());
    133         System.out.println("顾客要购买Benz:");
    134         Car benz=CarFactory.getCar("Benz");
    135         System.out.println("提取汽车:"+benz.getInfo());
    136         
    137         
    138         
    139     }
    140 
    141 }

    输出结果:

     1 开始学习多态喽~~
     2 
     3 方法重载 ,同一个类多个同名方法:
     4 半径为5.2的圆的面积是:84.905594
     5 长为4.0宽为8.0的长方形的面积是32.0
     6 画5个任意形状的图形。
     7 画一个星星形状的图形。
     8 
     9 计算几何图形的面积:
    10 图形的面积是:Circle
    11 图形的面积是:Rectangle
    12 
    13 简单的汽车销售商场
    14 顾客要购买BMW:
    15 提取汽车:It's a BMW!
    16 顾客要购买Benz:
    17 提取汽车:It's a Benz!
  • 相关阅读:
    c# 反射取其他项目的资源文件
    【分享】免费建立自己的站点
    c# 自定义类型的DataBindings
    ListView 多行拖拽排序
    linq to sql之组装where条件下的'或'语句
    dotfuscator使用方法
    orderBy 传入属性的字符串
    WCF数据交互时长度超过8192
    ASP.net中aspx与cs函数的互调
    c# 读取excel数据的两种方法
  • 原文地址:https://www.cnblogs.com/sunshine-habit/p/5642081.html
Copyright © 2020-2023  润新知