package test3;
public class test31 {
public static void main(String[] args) {
// 多态
// 1.发生在父类与子类之间
// 2.子类必须实现方法的重写
// 3.定义的时候是父类,实例化的时候是子类
//多态的好处 定义一个对象 ,实例化不同的子类,来调用不同子类已经实现的抽象方法
Figure f = new Circle(3.4);
f = new Rectangle(26.1, 8.4);// 新加的
f.area();
f.perimeter();
f.printInfo();
}
}
//几何图形
//父类本身无法实现方法,但要求子类必须要实现这个方法-抽象方法
//1.抽象方法的格式: abstract 返回值类型 方法名字([参数]); 方法的声明 是不具体实现的
//2.如果一个类包含了抽象方法,那么这个类一定是抽象类 格式:abstract class 类名{}
//注:这是充分非必要条件,一个类是抽象类,不一定包含抽象方法
//抽象类里面可以包含抽象方法也可以包含普通方法
abstract class Figure {
double area;
double p;
void printInfo() {
System.out.println("图形面积" + area);
System.out.println("图形周长" + p);
}
// 计算面积
abstract void area();// 抽象方法
// 计算周长
abstract void perimeter();
}
//3.如果一个父类包含抽象方法,那么它的子类一定要实现父类的所有的抽象方法
//final关键字修饰方法时,方法不可被重写
//final关键不不修饰抽象方法
class Circle extends Figure {
// circle 用add
double r;
Circle(double r) {
this.r = r;
}
@Override
void area() {
// TODO Auto-generated method stub
area = Math.PI * r * r;
}
@Override
void perimeter() {
// TODO Auto-generated method stub
p = 2 * Math.PI * r;
}
}
//如果一个子类继承一个抽象的父类,需要实现父类所有的抽象方法
class Rectangle extends Figure {
double width;// 宽
double length;// 长
Rectangle(double width, double length) {
this.width = width;
this.length = length;
}
@Override
void area() {
// TODO Auto-generated method stub
area = this.width * this.length;
}
@Override
void perimeter() {
// TODO Auto-generated method stub
p = 2 * (this.width * this.length);
}
}
package test3;
public class test32 {
public static void main(String[] args) {
}
}
//抽象类是普通类的一个特例
//接口是抽象类的一个特例
//1.接口里面只可以有抽象方法,接口的成员变量必须是静态成员常量 格式:static final 数据类型 变量名;
//2.接口里面的静态成员常量只可以在初始化时候赋值
//3.接口里面不管是抽象方法还是静态成员常量,public访问控制权限
//格式:interface 接口名字{}
//4.一个文件里面只有一个公共类或公共接口
interface figure1{
static final int a=1;//1.static final可省略(本质上静态成员常量-public可省略)
void printInfo();//2.抽象方法 abstract关键字可省略,public可省略
}
//接口使用接口,格式:接口1 extends 接口2(两个接口之间的继承-单继承模式)
interface figure2 extends figure1{
int b=2;
void printInfo2();
}
abstract class figure3{
int b=2;//这是默认的
}
//特使情况,一个类实现多个接口,还要继承一个其他类
//格式:class 类名 extends 其他类名 implements 接口1,接口2,接口3.。
class figure123 extends figure3 implements figure1,figure2{
//add
@Override
public void printInfo2() {
// TODO Auto-generated method stub
}
@Override
public void printInfo() {
// TODO Auto-generated method stub
}
}
//类使用接口,格式:类 implements 接口1,接口2,接口3.。。(多实现机制)
//类实现接口的时候,需要实现所有接口的所有方法(因为这些方法都是抽象方法)
class figure12 implements figure1,figure2{
@Override
public void printInfo() {
// TODO Auto-generated method stub
}
@Override
public void printInfo2() {
// TODO Auto-generated method stub
}
}