zoukankan      html  css  js  c++  java
  • java面向对象 3

    一、    多态【子类就是父类】

    1、      为什么使用多态

    提高程序可扩展性,可维护性,提高代码可重用性

    2、      什么是多态【P71】

    具有表现多种形态能力的特征

    同一个实现接口,使用不同的实例而执行不同的操作

    3、      如何使用多态

    l  方法的参数类型是父类

    访问修饰符 返回类型 方法名(父类名 对象名){

    ……………………………………………….

    }

    n  调用方法时,可以传递子类的对象

    l  父(子)类名 对象 = new 子类名();

    l  方法名(子类对象);

    l  方法的返回类型是父类

    访问修饰符 父类名 方法名([参数列表]){

          return 父类对象或子类对象;

    }

    4、      多态中子类和父类之间的转换

    a) 子类到父类的转换(向上转换)

    父类 对象名 = new 子类();//自动进行转换

    对象名.方法名([值]);

               向上转换的使用规则【P72】:

    l  父类引用指向子类对象时称为向上转换或转型(upcasting),自动进行类型转换

    l  通过父类引用变量,调用的方法是子类覆盖(重写)或继承父类的方法【选择题1、2】

    l  通过父类引用变量,无法调用子类特有的方法【选择题3】

    b)父类到子类的转换(向下转换)——强制类型转换,还原对象的真实面目(具体是哪种子类)

              父类 对象名 = new 子类();

               对象名.子类方法();//编译有错误

           应修改为:

               父类 对象名 = new 子类();

               子类 子类对象 =(子类)对象名;

               子类对象.子类方法();

          c)、运算符instanceof

    l  作用:避免父类向子类进行转换时出现异常,进行类型的判断(判断对象是否属于一个类或实现了一个接口,返回一个布尔类型的值【true或false】)

    l  注意:该运算符,通常和强制类型转换结合使用

    if(对象名 instanceof 类名){

       类名 对象=(类名)对象名;

    }

    对象名和类名必须存在继承关系,否则is语句编译错误

     1 //子类,圆形
     2 public class Circular extends Graph {
     3         private final double X=3.14;        //半径
     4         
     5         public Circular(double r){
     6             super(r);
     7         }
     8         
     9         public void getArea(){
    10             double m=(super.getLen()*X*X);
    11             System.out.println("圆的半径为"+super.getLen()+"
    面积为"+m);
    12         }
    Graph
     1 //子类,圆形
     2 public class Circular extends Graph {
     3         private final double X=3.14;        //半径
     4         
     5         public Circular(double r){
     6             super(r);
     7         }
     8         
     9         public void getArea(){
    10             double m=(super.getLen()*X*X);
    11             System.out.println("圆的半径为"+super.getLen()+"
    面积为"+m);
    12         }
    getArea
     1 public abstract class Graph {
     2     private double len;            //图形的边长
     3     
     4     public Graph(double len){
     5         this.len=len;
     6     }
     7     
     8     //获取长度
     9     public double getLen(){
    10         return len;
    11     }
    12     
    13     //抽象面向方法
    14     public abstract void getArea();
    15 }
    父类
  • 相关阅读:
    线程的等待与唤醒
    多线程start()与run()的区别
    Thread与Runnable
    关于i++和++i的一些见解
    Mysql优化(转)
    Java 注解
    Java 泛型(转)
    Java 中的CAS
    CAS ABA问题
    Java 线程池分析
  • 原文地址:https://www.cnblogs.com/alhy/p/7017533.html
Copyright © 2011-2022 走看看