一.抽象类
思考一个问题:美女?
1.美女是抽象的,他不是具体的指向
2.假设美女有一个打扮的功能 dress
不同的美女打扮的功能实现的都不一样
class Beauty{
public void dress(){
//,
}
}
class PureBeauty extends Beauty{
//重写父类的打扮方法
}
class MatureBeauty extends Beauty{
//重写父类的打扮方法
}
---->既然子类都会重写父类的方法,是否可能父类只定义方法,而不需要声明方法体
-----概念---------------------------------------------------------
1.抽象方法:声明一个方法而不去书写方法体的方法,这就是一个抽象的方法
2.抽象方法需要使用关键字abstract进行修饰
3.一个类中如果有抽象的方法,那么他一定是抽象类,抽象类也需要使用abstract关键字进行修饰
4.抽象类他还是一个类.类的属性,方法,构造器的定义都可以和普通类一样
5.抽象类可以有抽象方法,也可以没有抽象方法.他也可以有非抽象方法
6.如果继承一个抽象类,需要实现父类所有的抽象方法!
7.抽象类不能直接实例化(不能new)
案例1.三个英文:敏捷(Agility),智力(intelligence),力量(power)
DOTA2里面的英雄有三种类别:
敏捷英雄,智力英雄,力量英雄,要求使用抽象类思想实现以下功能:
1.抽象类英雄Hero:昵称, 1个技能介绍方法:show()
2.敏捷英雄AgiHero:继承英雄类,重写show
3.智力英雄IntHero:继承英雄类,重写show
4.力量英雄PowerHero:继承英雄类,重写show
5.构建类Game,里面有一个方法play(),
如果传入是智力英雄,就执行show方法
如果传入是力量英雄,就执行show方法
如果传入是敏捷英雄,就执行show方法
6.写主方法测试GameTest,里面使用Game对象调play方法,并对调返回的对象的show方法
案例2.动物有2种类别:狗和猫,要求使用抽象类思想实现以下功能:
1.抽象类动物Animal:名称,年龄, 抽象方法eat和非抽象方法sleep()
2.狗Dog:继承动物类,重写eat()
3.猫Cat:继承动物类,重写eat()
4.构建类动物园Zoo,里面有一个方法play(),传一个动物对象,调用动物的eat和sleep方法
5.写主方法测试ZooTest,实例化猫和狗,里面使用Zoo对象调play方法,打印 结果
二.接口
1.USB接口:不管是U盘,苹果电脑,平板或者各类可以支持USB,只要满足USB的规范,就可以使用
2.插座
3.定义:他是一种公共的规范标准,只要符合标准,大家都可以使用
3.1 java中的接口更多的体现在方法的抽象
学生规范{
//1.不得参与黄赌毒
f1();
//2.不得辱骂他人
f2();
}
//假如继承的语法
class VIP11_坤坤 extends 软帝学生规范{
f1(){
//所有和黄赌毒有一丁点关系的都属于违反准则
}
f2(){
//不得用动物形容他们
}
}
class VIP10_凡凡 extends 软帝学生规范{
f1(){
//所有和黄赌毒有一丁点关系的都属于违反词条准则
}
f2(){
//可以使用舔狗此类网红单词,但是不得恶意辱骂
}
}
//…
3.2 接口是更加纯粹的抽象类,一般接口里面只有抽象方法 (1.8开始,例如集合类的Iterable接口里面有非抽象)
3.3 接口的关键字是interface
3.4 接口的里面方法默认都是publick修饰,可以写abstract,也可以不写
3.5 要想使用接口,需要使用关键字(implements)实现,必须要重写接口的所有抽象方法
3.6 接口不能直接实例化
3.7 [了解]接口可以多继承,功能的集成
3.8 一个类只能继承一个抽象类,但是可以实现多个接口
接口:他是一种公共的规范标准,只要符合标准,大家都可以使用
在代码里面,他是一组抽象行为(方法,功能)的集合
4.接口里面所有的变量都是常量, 接口里面的方法和属性都是public修饰的
建议写法: public static final int NUM=20;
public static final String LOGIN_NAME=“登录”;
很多的时候,public final会被省略