14抽象类和接口

抽象类和接口

**抽象方法:**在子类继承父类之后,发现有些方法必须要进行重写! 但是如果父类中不编写此方法,就没有办法使用多态调用了,所以必须要写,但是没必要实现,于是成为了抽象。

// 父类
public abstract class Pet{
    public abstract void eat(); // 抽象方法没有方法体
}

// 子类
public class Dog extends Pet{
    public void eat(){
        
    }
}
// 子类
public class Cat extends Pet{
    public void eat(){
        
    }
}

main(){
    Pet pet = new Dog(); // 父类的引用指向子类的对象
    pet.eat();
}

1. 了解抽象类和普通类的区别

抽象类的特点:

  1. 抽象类不能被实例化 (实例化:创建对象)

    但是抽象类可以作为引用去指向子类的对象。

    public abstract class Pet {
    	public abstract void test();
    }
    // 匿名内部类:可以将匿名内部类 理解为 是该类的一个子类(匿名的)  这个东西只能用一次
    Pet pet = new Pet() {
        @Override
        public void test() {
    
        }
    };
    
  2. 抽象类可以有构造方法

    它的构造方法是用来帮助子类创建对象的

  3. 只要有抽象方法存在,这个类就是抽象类。

    抽象类中可以有抽象方法,也可以有普通方法。

    (“父债子偿”) 一个抽象类里的抽象方法 必须要被其子类重写(实现),如果子类不重写,它也是抽象类。

2. 掌握抽象类和抽象的方法的定义

abstract 抽象的

3. 会定义接口

4. 了解"接口"的含义

接口1:

public class Student{
	// 1. 私有化属性
	private String name;
	// 2. 提供公共的getter/setter接口
	public void setName(String name){
		this.name = name;
	}
	public String getName(){
		return name;	
	}
}

以后你可能需要给别人编写接口。

**举例:**你要开发一个天气App,不需要自己去花费时间等测量实时天气情况,只需要获取一下国家气象局的提供的天气接口即可。

国家气象局的数据收集到之后,开发GG给你写了一个方法,这个方法可以被你调用。 你只需要按照要求传入指定的参数,即可得到指定的结果!

public String getxx(String 地址,Date 时间,String 你想要的天气数据编号等…){

​ // 实现与你无关

}

**接口2:**USB接口 电源接口…

接口3: interface

实现一个防盗门的功能。

门类:开门和关门的功能

锁类:开锁和上锁的功能

防盗门 is a 门 所以可以继承门类,拥有了开门和关门的功能。

但是它想拥有开锁和上锁 不能通过继承锁类。 1.防盗门 is not a 锁! 2.Java中是单根继承 只能有一个直接父类。

如果还想拥有锁的功能,这时候就可以使用接口 interface。 防盗门 has a 锁。

继承:找亲爹

实现接口:认干爹

你只能有一个亲爹,你可以有多个干爹。

之所以在Java诞生接口这个概念,其中的原因有:在日趋庞大的系统中,如果将所有的功能都定义在一个类中,那么必然会导致耦合性的加剧,还有扩展性的降低。 所以我们把一些功能进行聚合,放到接口中,未来谁想拥有这些功能直接实现此接口即可。

/**
 *  防盗门
 * @author Charles7c
 * 2019年2月15日 上午9:50:20
 */
public class ThiefDoor extends Door implements Lock,CatEye{
	@Override
	public void upLock() {
		
	}

	@Override
	public void downLock() {
		
	}
}
/**
 * 门:有开和关
 * @author Charles7c
 * 2019年2月15日 上午9:50:47
 */
public class Door {

	public void open() {
		System.out.println("开门");
	}
	
	public void close() {
		System.out.println("关门");
	}
}
/**
 * 锁接口
 * @author Charles7c
 * 2019年2月15日 上午9:58:26
 */
public interface Lock {
	// 在接口中编写普通方法  只能是抽象的abstract 公共的public 
	void upLock();
	void downLock();
}

接口的一些注意事项:

  1. 接口中的普通方法,都是公共的public抽象的abstract
  2. 接口中的属性 都是公共的public静态static常量final
  3. 接口中的方法也都需要子类去重写
  4. 接口不能实例化,也可以编写匿名内部类
  5. 接口和接口之间可以有继承关系

演示案例:

需求:模拟手机的功能。

​ 手机分为智能机和普通机。手机这个概念就证明它肯定有通话和短信功能。

​ 普通机有的功能:听歌

​ 智能机有的功能:上网冲浪 看视频 打游戏 听歌

智能机类

普通机类

手机类

听歌接口

上网冲浪接口

看视频接口

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值