Java基础之抽象类和接口

1.抽象类

在面向对象过程中,所有的对象都可以通过类来描述(创建)。反过来讲,并不是所有的类都能创建对象。如果一个类中没有足够完整的信息来描述具体的对象,那么这样的类就叫做抽象类。
在Java中,使用abstract关键字来修饰的类叫抽象类。

1.1代码示例1
//使用abstract修饰的方法叫做抽象方法
//使用abstract修饰的类叫做抽象类

abstract class 类名 {
	//普通方法
    public void eat() {
        
    }
    //抽象方法
    //无大括号
    public abstract void eat();
}

//抽象类不能实例化,那如何使用这个类呢?
//解决方法:再写一个普通类去继承抽象类,重写父类方法即可
1.2代码示例2
class Cell {
	public void add () {
		System.out.println("分裂");
	}
}
//抽象类可以继承非抽象类
abstract class Animal extends Cell{
	public abstract void run();
}
//抽象类可以继承抽象类
abstract class Monkey extends Animal{
	//抽象类中可以有普通成员方法
    public void call () {
		System.out.println("咿咿呀呀.......");
	}
    //抽象类中的抽象方法
	public abstract void eat();
	public abstract void sleep();
}
//声明一个普通类去继承抽象类
class People extends Monkey {
	//多重继承到的所有抽象方法都要重写
	@Override
	public void eat() {
		System.out.println("干饭人,干饭魂!!!");
	}

	@Override
	public void sleep() {
		System.out.println("呼噜呼噜~~~");
	}
	@Override
	public void call() {
		System.out.println("莫西莫西~~~");
	}

	@Override
	public void run() {
		System.out.println("你是风儿,我是沙~~~");
	}	
}

public class Demo2 {
	public static void main(String[] args) {
		People people = new People();
		people.add();
	}
}
1.3抽象类总结

1.如果一个类用abstract来修饰,那么这个类叫做抽象类。
2.抽象类中可以有抽象方法和非抽象的方法(成员方法,构造方法)。
3.抽象方法是没有方法体的,是一个不完整的方法。
4.抽象类不能被实例化,即不能直接用来创建对象。
5.写一个普通类去继承抽象类可解决不能被实例化的问题。
6.在继承抽象类时,一定要重写抽象类中所有的抽象方法,让抽象方法变得有意义。
7.抽象类中的非抽象方法在子类中可重写可不重写。
8.一个抽象类A可以继承另一个抽象类B,此时继承A的普通类还需要重写B中的抽象方法。
9.抽象类可以继承一个非抽象类。

2.接口

2.1Java中的接口

接口的作用:拓展功能。

语法格式:

interface 接口名字 {
	//成员变量
	//成员属性
}
2.2代码示例1
interface USB {
	//接口下的方法默认全都是抽象方法
    //public可以省去
	public void connection();
}

//接口的抽象方法无法实例化
//要使用一个普通的类来实现(implements)接口的功能,重写接口的方法
class Computer implements USB {
	@Override
	public void connection() {
		System.out.println("连接鼠标");
	}
}
public class Demo1 {
	public static void main(String[] args) {
		Computer computer = new Computer();
		computer.connection();
	}
}
2.3代码示例2
interface B2 {
	public void work();
}
//一个接口可以继承另一个接口
interface B1 extends B2{
	public void smoking();
}

//声明一个接口
interface A1 {
	//接口下的属性默认用static和final修饰,要赋初始值
    //属性名一般每个字母都要大写
    String NAME = "狗蛋";
	
	//接口下默认都是抽象方法
    public void test();
    //public可以省
	void eat();
    //jdk1.8之后,允许接口下写带有方法体的方法,但必须用default修饰
	public default void sleep () {
		System.out.println("睡觉睡得啥也不知道");
	}
}
//写一个普通的类去实现(implements)当前的接口
//一个类可以实现多个接口
class TestA1 implements A1, B1{
	//要在实现类中重写所有的抽象方法
	@Override
	public void test() {
		System.out.println("测试");
	}

	@Override
	public void eat() {
		System.out.println("吃东西");
	}
	@Override
	public void sleep() {
		System.out.println("睡觉");
	}

	@Override
	public void smoking() {
		System.out.println("吸烟有害健康!");
	}

	@Override
	public void work() {
		System.out.println("努力搞钱!!!");
	}	
}
public class Demo2 {
	public static void main(String[] args) {
		TestA1 testA1 = new TestA1();
		testA1.eat();
		testA1.test();
		testA1.sleep();
	}
}
2.4接口总结

1.使用关键字interface声明一个接口。
2.接口下面可以有属性,但这个属性必须赋值。这是因为接口的属性都是常量!!!默认用static和final修饰。
3.接口下面的方法默认全是抽象方法,abstract可写可不写。
4.从jdk1.8之后,接口下面可以写带有方法体的方法,只不过这种方法必须要用default修饰的(jdk1.8新特性),这种方法也可以被重写。
5.接口中没有构造方法,因此不能被实例化!!!
6.一般写一个普通的类去实现(implements)当前的接口,此类可以继承接口中的属性,但不能对其进行赋值!此类还可以使用接口中带有方法体的方法。
7.一定要在实现类中实现接口中所有的抽象方法
8.一个类可以实现多个接口,中间用逗号隔开,弥补了单继承的缺陷。
9.一个接口可以去继承另外一个接口,使用关键字extends。
10.一个抽象类可以实现(不能继承)一个接口。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值