7.7多态
利用多态可以使程序具有良好的扩展性,并可以对所以类对象进行通用的处理。
假如现在要编写一个绘制图形的方法draw(),如果转入正方形对象就绘制正方形,如果转入圆形对象就绘制圆形,这种场景可以使用重载来实现:
public void draw(Square s){ //绘制正方形的方法
}
public void draw(Cicular){ //绘制圆形的方法
}
class Shape{} //圆形类
class Square extends Shape{} //正方形类继承图形类
class Circular extends Shape{} //圆形类继承圆形类
public class Demo6{
public static void draw(Shape s){ //绘制方法
if(s instanceof Square){ //如果是正方形
System.out.println("绘制正方形");
}else if (s instanceof Circular){ //如果是圆形
System.out.println("绘制图行");
}else{ //如果是其他类型
System.out.println("绘制父类图形");
}
}
public static void main(String[] args){
draw(new Shape());
draw(new Squsre());
draw(new Circular());
}
}
7.8抽象类与接口
通常可以说四边形具有4条边,或者更具体一点,平行四边形是具有对边平行且相等特征性的特殊四边形,等腰三角形.
7.8.1抽象类
仅用来描述特征且极具抽象性类,在java中被定义为抽象类
抽象类与方法使用abstract关键词定义
抽象方法语法:修饰符 abstract 返回参数 方法名 (传入参数);
与传统方法不同,抽象方法没有方法体,有抽象方法的类一定是抽象类,当父类是抽象类,有抽象方法时,它的子类要么重写父类的抽象方法,要么定义为抽象类(抽象方法重写之后就是普通方法了)
抽象类语法:修饰符 abstract class 类名{}
7.8.2接口
接口是抽象类的延伸,可以将它看作是纯粹的抽象类,接口中所有的方法都是抽象方法·,由于java语言每个类只能继承一个父类,因此接口的作用就凸显出来,一个类可以实现多个接口,可以看作一个类可以拥有多个父类(便于理解并不是官方意思)
接口使用interface关键词定义
接口语法:修饰符 interface 接口名
实现 implements
java语言每个类可以实现多个接口
实现语法:修饰符 class 类名 implements 接口1,接口2,...{}
例题7.13:
interface Paintable1{ //新建一个接口
public void draw(); //绘制对象方法
}
//四边形类
class Quadrangle1{
public void doAnything() {
System.out.println("四边形提供的方法");
}
}
//平行四边形类,继承四边形类,,并实现了绘制接口
class Parallelogram1 extends Quadrangle1 implements Paintable1{
public void draw() {
System.out.println("绘制平行四边形");
}
}
//正方形类,继承四边形类,,并实现了绘制接口
class Square1 extends Quadrangle1 implements Paintable1{
public void draw() {
System.out.println("绘制正方形");
}
}
//圆形类,仅实现了绘制接口
class Circular1 implements Paintable1{
public void draw() {
System.out.println("绘制圆形");
}
}
public class liti7_13 {
public static void main(String[] args) {
Square1 s1 = new Square1();
s1.draw();
s1.doAnything();
Parallelogram1 p = new Parallelogram1();
p.draw();
p.doAnything();
Circular1 c = new Circular1();
c.draw();
}
}