Java 抽象类和接口

Java 抽象类和接口

抽象类定义

抽象类和抽象方法都要使用 abstract 关键字声明。
如果一个方法被声明为抽象的,那么这个类也必须声明为抽象的。而一个抽象类中,可以有 0~n 个抽象方法,以及 0~n 个具体方法。
抽象类不能实例化,也就是不能使用 new 关键字创建对象。

抽象类实例

抽象类 Shape

public abstract class Shape {
    public int width; // 几何图形的长
    public int height; // 几何图形的宽
    public Shape(int width, int height) {
        this.width = width;
        this.height = height;
    }
    public abstract double area(); // 定义抽象方法,计算面积
}

定义一个正方形类,该类继承自形状类 Shape,并重写了 area( ) 抽象方法

public class Square extends Shape {
    public Square(int width, int height) {
        super(width, height);
    }
    // 重写父类中的抽象方法,实现计算正方形面积的功能
    @Override
    public double area() {
        return width * height;
    }
}

定义一个三角形类,该类与正方形类一样,需要继承形状类 Shape,并重写父类中的抽象方法 area()

public class Triangle extends Shape {
    public Triangle(int width, int height) {
        super(width, height);
    }
    // 重写父类中的抽象方法,实现计算三角形面积的功能
    @Override
    public double area() {
        return 0.5 * width * height;
    }
}

测试类

public class ShapeTest {
    public static void main(String[] args) {
        Square square = new Square(5, 4); // 创建正方形类对象
        System.out.println("正方形的面积为:" + square.area());
        Triangle triangle = new Triangle(2, 5); // 创建三角形类对象
        System.out.println("三角形的面积为:" + triangle.area());
    }
}

运行结果

正方形的面积为:20.0
三角形的面积为:5.0

接口类定义

在Java中接口是一个全部由抽象方法组成的集合,接口需要用interface定义,里面只能有抽象的方法和常量。
接口体现的是事物扩展的功能,在Java中,类定义了一个实体,包括实体的属性,实体的行为。而接口定义了一个实体可能发生的动作,只有一个声明,没有具体的行为。当一个方法在很多类中有不同的体现是时候这个时候就可以将这个方法抽象出来做成一个接口

接口类实例


interface A {
	public static final int i = 10;		//接口只能定义全局常量需要加public static final如果不加系统默认给出,推荐加。
                                                
	public abstract void eat();
}
 
interface B extends A { 		// 接口可以继承接口
	public abstract void sleep();
}
 
interface C {
	public abstract void look();
}
 
abstract class D {        //定义一个抽象类
	public void run() {
		System.out.println("跑起来");
	}
 
	public abstract void learn();
}
 
public class Text extends D implements B, C {		//一个子类可以继承一个抽象类同时实现多个接口
	//子类如果不是抽象类就必须实现所有的抽象方法
	
	public void eat() {		//实现接口A中的抽象方法
		System.out.println("吃东西");
	}
 
	public void look() {		//实现接口C中的抽象方法
		System.out.println("看风景");
	}
 
	public void sleep() {		//实现接口B中的抽象方法
		System.out.println("睡懒觉");
	}
 
	@Override
	public void learn() {	//重写抽象类D中的抽象方法
		System.out.println("学Java");
	}
 
	public static void main(String[] args) {
		B b=new Text();		//多态,接口的引用指向子类的对象
		b.eat();
		b.sleep();
		System.out.println(B.i);    //静态常量通过接口名去访问,不推荐用对象去调用
                C c=new Text();
		c.look();
		D d=new Text();	
		d.learn();
		
	}
}

运行结果

吃东西
睡懒觉
10
看风景
学Java

抽象类和接口类区别

Java中接口和抽象类的定义语法分别为interface与abstract关键字。
抽象类:在Java中被abstract关键字修饰的类称为抽象类,被abstract关键字修饰的方法称为抽象方法,抽象方法只有方法的声明,没有方法体。抽象类的特点:
a、抽象类不能被实例化只能被继承;
b、包含抽象方法的一定是抽象类,但是抽象类不一定含有抽象方法;
c、抽象类中的抽象方法的修饰符只能为public或者protected,默认为public;
d、一个子类继承一个抽象类,则子类必须实现父类抽象方法,否则子类也必须定义为抽象类;
e、抽象类可以包含属性、方法、构造方法,但是构造方法不能用于实例化,主要用途是被子类调用。

接口:Java中接口使用interface关键字修饰,特点为:
a、接口可以包含变量、方法;变量被隐士指定为public static final,方法被隐士指定为public abstract;
b、接口支持多继承,即一个接口可以extends多个接口,间接的解决了Java中类的单继承问题;
c、一个类可以实现多个接口;
d、JDK1.8中对接口增加了新的特性:(1)、默认方法(default method):JDK 1.8允许给接口添加非抽象的方法实现,但必须使用default关键字修饰;定义了default的方法可以不被实现子类所实现,但只能被实现子类的对象调用;如果子类实现了多个接口,并且这些接口包含一样的默认方法,则子类必须重写默认方法;(2)、静态方法(static method):JDK 1.8中允许使用static关键字修饰一个方法,并提供实现,称为接口静态方法。接口静态方法只能通过接口调用(接口名.静态方法名)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值