抽象类概念和作用
-
抽象类:
- Java中可以定义没有方法体的方法,该方法由子类来具体实现。
- 此没有方法体的方法,称之为抽象方法。
- 含有抽象方法的类,称之为抽象类。
-
抽象类的特点:
- 定义中含有抽象方法的类叫做抽象类。
- 抽象类用abstract来修饰。
- 抽象类代表一种抽象的对象类型。
- 抽象类不能实例化。
- 抽象类中可以有具体方法,也可以没有具体方法。
-
抽象方法的特点:
- 只有方法头,没有方法体的方法称为抽象方法
- 抽象方法用abstract来修饰
- 抽象方法代表一种不确定的操作或行为
- 抽象方法不能被调用
抽象类定义:
abstract class Demo1
{
abstract public void printInfo();
}
抽象类通过子类来做实现方法
abstract class Demo1
{
abstract public void printInfo();
}
class Demo2 extends Demo1
{
public void printInfo() {
System.out.println("被实现的方法");
}
}
public class Test {
public static void main(String[] args) {
Demo2 d = new Demo2();
d.printInfo();
}
}
执行结果:
匿名的内部类写法:
abstract class Demo1
{
abstract public void printInfo();
}
public class Test {
public static void main(String[] args) {
Demo1 d = new Demo1() {
public void printInfo() {
// TODO Auto-generated method stub
System.out.println("demo1 printf");
}
};
d.printInfo();
}
}
模板方法模式
-
定义
一个模板方法用一些抽象的操作定义一个算法,而子类将重定义这些操作以提供具体行为 -
意图
定义一个操作中的一个算法框架,把一些步骤推迟到子类去实现。
模板方法模式让子类不需要改变算法结构
模板方法:
public void work(){
//初始化串口
initUart();
//打开灯
openLight();
//关闭灯,结束程序
close();
}
模板方法案例:
abstract class Con1
{
abstract public void initUart();
abstract public void getCommand();
abstract public void openLight();
abstract public void openTv();
abstract public void close();
public void work(){
initUart();
getCommand();
openLight();
openTv();
close();
}
}
class STC15wCon extends Con1
{
public void initUart() {
// TODO Auto-generated method stub
System.out.println("STC15wCon initUart");
}
public void getCommand() {
// TODO Auto-generated method stub
System.out.println("STC15wCon getCommand");
}
public void openLight() {
// TODO Auto-generated method stub
System.out.println("STC15wCon openLight");
}
public void openTv() {
// TODO Auto-generated method stub
System.out.println("STC15wCon openTv");
}
public void close() {
// TODO Auto-generated method stub
System.out.println("STC15wCon close");
}
}
class C51Con extends Con1
{
public void initUart() {
// TODO Auto-generated method stub
System.out.println("C51 initUart");
}
public void getCommand() {
// TODO Auto-generated method stub
System.out.println("C51 getCommand");
}
public void openLight() {
// TODO Auto-generated method stub
System.out.println("C51 openLight");
}
public void openTv() {
// TODO Auto-generated method stub
System.out.println("C51 openTv");
}
public void close() {
// TODO Auto-generated method stub
System.out.println("C51 close");
}
}
public class Test {
public static void main(String[] args) {
C51Con c = new C51Con();
c.initUart();
System.out.println("-------------------");
c.work();
System.out.println("-------------------");
STC15wCon c15 = new STC15wCon();
c15 .work();
}
}
执行结果
接口的概念和作用
-
接口语法:
interface 接口名{
共有静态常量,抽象方法
} -
接口特点:
- 接口中只能存放静态常量和抽象方法
- Java接口是对功能的拓展
- 通过实现接口,Java类可以实现多实现
- 一个类可以同时继承(extends)一个父类并且实现(implements)多个接口
- 接口与接口之间可以使用extends实现继承
interface action
{
abstract void eat();
abstract void drink();
}
class man implements action
{
public void eat() {
// TODO Auto-generated method stub
System.out.println("男人吃饭");
}
public void drink() {
// TODO Auto-generated method stub
System.out.println("男人喝酒");
}
}
class dogman implements action
{
public void eat() {
// TODO Auto-generated method stub
System.out.println("狗吃骨头");
}
public void drink() {
// TODO Auto-generated method stub
System.out.println("狗喝水");
}
}
public class Test {
public static void main(String[] args) {
new man().drink();
new dogman().eat();
}
}
执行结果:
接口和抽象类的区别
抽象类和具体实现之间是一个继承关系,也就是如果采用抽象类的方式,则父类和子类在概念上应该是相同的
接口和实现在概念上不要求相同,接口只是抽取相互之间没有关系的类的共同特征,而不去关注类之间的关系,它可以使没有层次关系的类具有相同的行为
- 抽象类是对一组具有相同属性和行为的逻辑上有关系的事物的一种抽象。
- 接口则是对一组具有相同属性和行为的逻辑上不相关的事物的一种抽象。