Java之多态,抽象类,接口

Java之多态,抽象类,接口

Java三大属性:继承,封装,多态。今天就介绍一下它的多态性。

1.多态

多态(Polymorphism)按字面的意思就是“多种状态”。在面向对象语言中,接口的多种不同的实现方式即为多态。引用Charlie Calverts对多态的描述——多态性是允许你将父对象设置成为一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作(摘自“Delphi4 编程技术内幕”)。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。多态性在Object Pascal和C++中都是通过虚函数实现的。

多态存在的三个必要条件:

  1. 要有继承关系
  2. 要有方法重写
  3. 要有父类引用指向子类对象(格式:Father fa = new Son())

实例一

public class DuoTai {

    public static void main(String[] args) {
        Teast t1=new Fenjiu();       //用接口名创建对象
        String result=t1.say();      //result用于接收返回值
        System.out.println(result);
        Teast t2=new Xhuac();
        t2.say();                    //不需接收返回值
    }

}
interface Teast{                     //接口Teast
    String say();                    //接口没有方法体
}
class Fenjiu implements Teast{

    @Override                        //重写
    public String say() {
        System.out.println("汾酒好喝!");
        return "fj";
    }

}
class Xhuac implements Teast{

    @Override
    public String say() {
        System.out.println("杏花村好喝!");
        return null;
    }

结果1

这里写图片描述

2.抽象类

抽象类往往用来表征对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。
通常在编程语句中用 abstract 修饰的类是抽象类。在C++中,含有纯虚拟函数的类称为抽象类,它不能生成对象;在java中,含有抽象方法的类称为抽象类,同样不能生成对象。
抽象类是不完整的,它只能用作基类。在面向对象方法中,抽象类主要用来进行类型隐藏和充当全局变量的角色。

实例二

package com.Hwadee;
/**
 *抽象类
 */

public class Abstract {

    public static void main(String[] args) {
        Rect rect=new Rect(3,5);
        Circle circle=new Circle(3);
        System.out.println("长方形周长:"+rect.getLen()+"长方形面积:"+rect.getArea());
        System.out.println("圆周长:"+circle.getLen()+"圆面积:"+circle.getArea());
    }

}
abstract class Myshape{
    double len;
    double area;
    public Myshape() {
    }
    public Myshape(double len, double area) {
        this.len = len;
        this.area = area;
    }

}
 class Rect extends Myshape{
     double length;
     double width;
    public Rect() {
        super();
        // TODO Auto-generated constructor stub
    }
    public Rect(double length, double width) {
        super();
        this.length = length;
        this.width = width;
    }
    public double getLen(){
        return 2*(length+width);
    }
    public double getArea(){
        return length*width;
    }
}
class Circle extends Myshape{
    double r;
    final double pi=3.1415;
    public Circle() {
    }
    public Circle(double r) {
        super();
        this.r = r;
    }
    public double getLen(){
        return 2*pi*r;
    }
    public double getArea(){
        return pi*r*r;
    }
}

结果二

这里写图片描述

3.接口

Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。

实例三

package com.Hwadee;
/**
 *利用接口实现Java多继承
 */
public class Interface {

    public static void main(String[] args) {
        Pencil p=new Pencil("中华");
        p.write();
        p.clean();
        p.shine();
    }

}
class Pen{
    String name;
    Pen(String name){
    }
    public void write(){
        System.out.println("用笔写字!");
    }
}
interface Eraser{                  //橡皮的接口
    public void clean();
}
interface Light{
    public void shine();
}
class Pencil extends Pen implements Eraser,Light{    //Pencil类继承Pen,实现Eraser,Light接口
    Pencil(String name) {     //构造函数
        super(name);
    }

    @Override
    public void write(){
        System.out.println("用带橡皮擦的铅笔写字!");
    }

    @Override
    public void clean() {
        System.out.println("用橡皮-->擦!");
    }

    @Override
    public void shine() {
        System.out.println("带闪光!");

    }
}

结果三

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值