java面向对象第三章

w 子类名();

3.2 方法名(子类对象);

3.3 方法的返回类型是父类

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

          return 父类对象或子类对象;

  }

//子类,圆形
public class Circular extends Graph {
        private final double X=3.14;        //半径
        
        public Circular(double r){
            super(r);
        }
        
        public void getArea(){
            double m=(super.getLen()*X*X);
            System.out.println("圆的半径为"+super.getLen()+"\n面积为"+m);
        }
//子类,长方形
public class Rectangle extends Graph {
    private double weight;            //宽度
    
    public  Rectangle(double len,double weight){
        super(len);
        this.weight=weight;
    }
    
    public double getWeight(){
        return weight;
    }
    
    public void getArea(){
        double m=(super.getLen()*this.getWeight());
        System.out.println("长方形的长为"+super.getLen()+",宽为"+this.weight+"\n面积为"+m);
    }
//父类
public abstract class Graph {
    private double len;            //图形的边长
    
    public Graph(double len){
        this.len=len;
    }
    
    //获取长度
    public double getLen(){
        return len;
    }
    
    //抽象面向方法
    public abstract void getArea();
}

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

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

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

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

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

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

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

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

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

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

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

       应修改为:

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

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

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

//父类
public abstract class Zhu {
    private String name;    //两者的姓名
    private String food;
    private String nation;
    /**
     * @return the name
     */
    public String getName() {
        return name;
    }
    public String getNation(){
        return nation;
    }
    public Zhu(String name,String food,String nation){
        this.name=name;
        this.food=food;
        this.nation=nation;
    }
    public String getFood(){
        return food;
    }
    public abstract void print();
}

父类
//子类
public class Wang extends Zhu{
    private String habit;    
    public Wang(String name,String habit,String food,String nation){
        super(name,food,nation);
        this.habit=habit;
    }
    public String getHabit(){
        return habit;
    }
    
    public void print(){
        System.out.println("我叫"+super.getName()+",来自"+super.getNation()+",喜欢吃"+this.getFood()+",爱好练"+this.habit);
    }
}

子类

 

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

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

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

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

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

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

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

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

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

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

       应修改为:

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

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

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

 父类
 子类
复制代码
//子类
public class YueHan extends Zhu{
    private String habit;
    
    public YueHan(String name,String habit,String food,String nation){
        super(name,food,nation);
        this.habit=habit;
        
    }
    
    public String gethabit(){
        return habit;
    }
    
    public void print(){
        System.out.println("我叫"+super.getName()+",来自"+super.getNation()+",喜欢吃"+this.getFood()+",爱好是打"+this.gethabit());
    }
}
posted @ 2017-06-15 19:11  此昵称仅此一个  阅读(89)  评论(0编辑  收藏  举报