java日常学习:多态

java代码块


多态

多态: 父类的引用类型变量指向了子类的对象 或者是接口的引用类型变量指向了接口实现类对象。

多态的前提: 必须存在继承或者实现关系。

多态要注意的细节:
1. 多态情况下,子父类存在同名的成员变量时,默认是访问父类的成员变量。
2. 多态情况下,子父类存在同名的非静态成员函数时,默认是访问子类的成员函数。
3. 多态情况下,子父类存在同名的静态成员函数时,默认是访问父类的成员函数
4. 多态情况下,不能访问子类特有的成员。

多态情况下,不能访问子类特有的成员。

多态情况下如果需要调用到子类特有的成员,那么需要进行强制类型转换。

基本数据类型:

小数据类型----->大数据类型    自动类型转换

大数据类型----->小数据类型    强制类型转换。

引用数据类型转换:

小数据类型----->大数据类型    自动类型转换

大数据类型----->小数据类型     强制类型转换

实现关系下 的多态 : 接口的引用类型变量指向了接口实现类的对象。

多态的前提: 存在继承或者实现的关系。


练习

/*
需求: 定义了图形、 矩形、 圆形三个类,所有的图形都具备计算面积与周长的方法,
只不过每种图形计算方式并不一致,。

要求:
    1. 定义一个方法可以接受 任意类型的图形对象,在方法内部调用图形周长与面积的方法。
    2. 定义一个方法可以返回任意类型的图形对象。
*/

abstract class MyShape {
    public abstract void getArea();
    public abstract void getLenght();
}

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 getLenght(){
        System.out.println("矩形的周长是:"+2*(width+height));
    }
}

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 getLenght(){
        System.out.println("圆形的周长是:"+2*PI*r);
    }

}

class demo1 {
    public static void main(String[] args) 
    {
        /*
        Rect r = new Rect(3,4);
        Circle c = new Circle(3.0);
        print(c);
        */
        MyShape m = getShape(1);
        m.getArea();
        m.getLenght();

    }
    //定义一个方法可以接受 任意类型的图形对象,在方法内部调用图形周长与面积的方法;
    public static void  print(MyShape m){
            m.getArea();
            m.getLenght();
    }
    //定义一个方法可以返回任意类型的图形对象;
    public static MyShape getShape(int i){
        if (i==0) {
            return new Circle(3.0);
        }else{
            return new Rect(3,4);
        }
    }

}

用于平时自己复习回顾,如有错误,欢迎指正

猜你喜欢

转载自blog.csdn.net/yan_star/article/details/78452111