Java抽象类与接口

一、抽象方法与抽象类

1.抽象方法:只有声明没有方法体:abstract public void shout();
2.抽象类:含有抽象方法的类

abstract class Animal {
    abstract public void shout();  //抽象方法
}
class Dog extends Animal { 
    //子类必须实现父类的抽象方法,否则编译错误
    public void shout() {
        System.out.println("汪汪汪!");
    }
    public void seeDoor(){
        System.out.println("看门中....");
    }
}
//测试抽象类
public class TestAbstractClass {
    public static void main(String[] args) {
        Dog a = new Dog();
        a.shout();
        a.seeDoor();
    }
}
  • 抽象类不能实例化,抽象类的构造方法只能被子类调用
  • 抽象类只能用来被继承。
  • 抽象方法必须在子类中实现,即使方法体为空也行

例子:

public class TestAbstract {
	public static void main(String[] args) {
		Animal a =new Dog();
		a.shout();
		// 编译器报错:a.seeDoor();
	}
}
abstract class Animal {
    abstract public void shout();  //抽象方法
}
class Dog extends Animal { 
    //子类必须实现父类的抽象方法,否则编译错误
    public void shout() {
        System.out.println("汪汪汪!");
    }
    public void seeDoor(){
        System.out.println("看门中....");
    }
}
  • 用抽象类实例化子类时,只能调用抽象类里面的方法
  • 注意:抽象类中也可以有非抽象方法,但必须有抽象方法!有抽象方法必定是抽象类!
public class TestAbstract {
	public static void main(String[] args) {
		Animal a =new Dog();
		a.shout();
		//a.seeDoor();
		a.a();
	}
}
abstract class Animal {
    abstract public void shout();  //抽象方法
    void a(){
    	System.out.println("lalala");
    }
}
class Dog extends Animal { 
    //子类必须实现父类的抽象方法,否则编译错误
    public void shout() {
        System.out.println("汪汪汪!");
    }
    public void seeDoor(){
        System.out.println("看门中....");
    }
}

二、接口

比较:

  1. 普通类:具体实现

  2. 抽象类:具体实现,规范(抽象方法)

  3. 接口:规范!

什么是接口?
接口就是比抽象类还抽象的抽象类,接口中全部的方法都是抽象方法。
如何使用?

public class TestInterface {
	public static void main(String[] args) {
		people p = new people();
		p.walkWay();
		p.walk();
		
		Walk walk = new people();
		walk.walk();
	}
}

interface Walk{
	void walk();  //public abstract ...
	int speed = 1; //public static final ...
}

class people implements Walk{

	@Override
	public void walk() {
		// TODO Auto-generated method stub
		System.out.println("走路速度:"+speed);
	}
	
	public void walkWay() {
		System.out.println("双腿行走");
	}
}
//双腿行走
//走路速度:1
//走路速度:1

接口说明

  • 常量:接口中的属性只能是常量,总是:public static final 修饰。不写也是。
  • 方法:接口中的方法只能是:public abstract。 省略的话,也是public abstract。
  • 接口不能创建实例,但是可用于声明引用变量类型(可用于调动接口里面的方法)。
  • 一个类实现了接口,必须实现接口中所有的方法,并且这些方法只能是public的。
  • 接口可以多继承。
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值