十四、抽象类和接口

						***十四抽象类和接****

书山有路勤为劲,学海无涯苦作舟,我们一起学习
一、抽象方法
学习是枯燥,字体颜色好看了可能你就没有心思学习了
1.抽象方法:在子类继承父类之后,发现有些方法必须要进行重写!但是如果父类中不编写此方法,就没有办法使用多态进行调用了,所以在父类中必须要进行方法的编写,但是没有必要进行实现,所以就撑了抽象的方法。

//父类
public abstract  class Pet(){
	public abstract void eat();//抽象的方法没有方法体
	}
//子类
public class Dog extends Pet(){
	public void eat(){
	System.out.println("狗吃骨头!");
	}
}
 
 
//子类
public class Cat  extends Pet(){
public void eat(){
System.out.println("猫吃鱼");
}


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

二、了解抽象类和普通类的区别
1.抽象类的特点
抽象类不能被实例化(没有办法去new一个对象)
但是抽象类可以以做为引用去指向子类的对象。

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

2.抽象类可以有构造方法
它的构造方法是用来帮助子类构造对象用的
3.只要有抽象方法存在,这个类就是抽象类
抽象类中可以有抽象的方法,也可以有普通的方法。
(父债子偿)一个抽象类里面的抽象的方法,必须要被其子类重新编写实现,如果子类不重写。那么子类也就是抽象类。

三、了解“接口”接口的含义
接口有一下三种的理解让我们一起认识一下
1.接口:

	public class Student{
		//1.属性私有化
		private String name;
		//2.提供共有的setter/getter方法
		public void setName(String name ){
				this.name = name;
		}
		public String getName(){
				return name;
		}
	}
	经过我们以后学习,我们很有可能去给别人去编写接口。
	```
	*举例说一下:假如我们自己要编写一个APP的天气预报,不需要我们来自己花费时间来测量天气情况,只需要我们获取一下国建气象局提供的天气接口即可。*
	public String getWheather (String 地址,Date 时间,还有你想要的天气数据编号或者你向需要的信息..){
			//具体的实现与你无关
	}
	

2.接口:USB接口,电源的接口

3.接口:interface
举例说明一下:
实现一个防盗门的功能,
门类:门有开和关的功能
锁类:开锁和上锁的功能
防盗门is a 门,所以可以继承门类。防盗门继承了门就有了门的开门和关门的功能,
但是防盗门想要拥有开锁和上锁的功能,就不能通过继承锁了,原因①防盗门is not a 锁,②Java中是单根继承,只能有一个直接父类。
如果我们的防盗门还想拥有开锁和上锁的功能,这时候我们就可以使用interface。 防盗门has a 锁
继承:找亲爹
实现接口:就是认干爹
你通俗的讲就是你可以有且只有一个亲爹,但是你可以有多个干爹
之所以在Java诞生接口这个概念,其中的原因有:在我们日趋庞大的系统中,如果将所有的功能都定义在一个类中,那么必然会导致耦合性的加剧,还有扩张性的降级,所以我们把一些能进行聚合,放到接口中,未来谁想拥有这些功能就直接去实现这些接口就行,

/**
*防盗门
*/
public class ThiefDoor extends Door implements Lock,CatEyes{
	@Override
	public void upLuck(){
	System.out.print("防盗门正在上锁");
	}
	@Override 
	public void downLuck(){
		System.out.print("防盗门正在解锁");
	}
}


/**
*门:有开和关的功能
*/
public class Door{
	public void open (){
		System.out.print("开门大吉");
	}
	public void close(){
		System.out.print("关门大吉");
	}
}

/**
*锁接口
*/
public interface Lock{
	//在接口中编写的普通方法,只能是抽象的abstract  公共的public 
	void upLock();
	void downLock();
}

四、接口中的一些注意的事项
①接口中的普通方法,都是公共的抽象的public abstrac 修饰的
②接口中的属性都是公共的静态的常量,必须赋值初始值,赋值以后就不能更改。public static final修饰
③接口中的方法也需要子类去进行重写编写
④接口不能被实例化,但是可以编写匿名的内部类
⑤接口和接口之间可以有继承关系

五、实践案例

模拟手机的功能
1。我们知道手机可以分为只能手机和普通手机,手机这个概念就证明他肯定有通话和发短信的功能。
2.普通手机有的功能:打电话和收发短信,听音乐
3.智能手机有的功能:打电话和收发短信。听音乐,上网冲浪,看视频,打游戏,
根据需求我们可以分析以下的类
①手机类父类,可以在其中来进行手机的属性私有化,进行品牌,类型,或者其他你想设置的属性。编写一个方法来实现手机的简单的介绍
②普通手机类,来继承手机的基本功能,然后进行接口的实现。
③智能手机类,来继承手机的基本功能,然后实现智能手机想要有的接口。
④接口有音乐接口,看视频接口,上网冲浪接口....后续你想加功能可以直接进行编写接口来进行实现
⑤最后写一个测试类来进行普通手机和智能手机的功能实现
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值