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);
}
}
}
用于平时自己复习回顾,如有错误,欢迎指正