宽化:把子类型对象当作超类型的实例对待
窄化:把超类型引用转换为子类型引用
转换隐式转换
byte,short,char-int-long-float-double
强制转换
窄化不安全,宽化安全
确定一个对象是否具有某种给定类型,用instanceof
if(a instanceof b)6.5 protected的真正含义
可通过对象引用.域、方法 形式访问任一一个protected成员,但该对象应该同级别或往下
protected静态域和静态方法可被任何扩展类访问
6.6final| final | 说明 |
| 域 | 改域为常量 |
| 方法 | 扩展类不能改写该方法 |
| 类 | 该类不能被扩展,所有方法也隐含的成为final |
仅定义了部分实现类,而留待子类提供这些方法的部分或全部的进一步实现
抽象方法必须被每一个非抽象的子类所实现
不能创建一个抽象类的对象,由于被调用的一些方法可能没有实现
作业:定义一个父类:形状类Shapes,里面有两个方法,分别是求面积和周长。
定义一个子类:矩形Rectangle
定义一个子类:三角形 Triagle
定义一个子类:圆 Circle
定义一个测试类:传入圆的半径1 输出周长和面积
传入矩形的长和宽3,2 输出周长和面积
传入三角形三边:3,4,5 输出周长和面积
import java.util.Scanner;
abstract class Shapes{
abstract double Area();
abstract double Perimeter();
}
class Rectangle extends Shapes{
double length;
double width;
public Rectangle(double length,double width){
this.length=length;
this.width=width;
}
double Area(){
return length*width;
}
double Perimeter(){
return (length+width)*2;
}
}
class Triagle extends Shapes{
double len_a;
double len_b;
double len_c;
public Triagle(double len_a,double len_b,double len_c){
this.len_a=len_a;
this.len_b=len_b;
this.len_c=len_c;
}
double Area(){
double c=(len_a+len_b+len_c)/2;
double area=Math.sqrt(c*(c-len_a)*(c-len_b)*(c-len_c));
return area;
}
double Perimeter(){
return len_a+len_b+len_c;
}
}
class Circle extends Shapes{
double r;
public Circle(double r){
this.r=r;
}
double Area(){
return Math.PI*r*r;
}
double Perimeter(){
return 2*Math.PI*r;
}
}
public class prog{
public static void main(String[] args) {
Circle a=new Circle(1);
System.out.println("Circle's area is "+a.Area());
System.out.println("circle's perimeter is "+a.Perimeter());
Rectangle b=new Rectangle(3,2);
System.out.println("rectangle's area is "+b.Area());
System.out.println("rectangle's perimeter is"+b.Perimeter());
Triagle c=new Triagle(3,4,5);
System.out.println("triagle's area is "+c.Area());
System.out.println("triagle's perimeter is "+c.Perimeter());
}
}



