抽象类与接口的实际应用

简介:

3.7、抽象类与接口的实际应用{百分百的重点}

开发原则:
       在类的开发之中,一个类不会去继承一个已经实现好的类,只会继承抽象类或实现接口。
       即:以下的代码是不应该出现在程序之中的:
class A{}
class B extends A{}

3.7.1、抽象类实际应用

       抽象类本身是不能直接实例化的。因为其本身包含抽象方法。
       但是抽象类的时候符合继承关系,只要有继承关系,则肯定会存在对象的向上或向下转型的问题,一但对象发生了向上转型,则肯定一切的方法以被子类覆写过的方法为准。
abstract class A{
         public abstract void fun() ;
};
class B extends A{
         public void fun(){
                   System.out.println("Hello World!!!") ;
         }
};
public class Demo32{
         public static void main(String args[]){
                   A a = new B() ;
                   a.fun() ;
         }
};
       从以上代码之中可以发现,抽象类可以实例化,但是需要通过对象的多态性,通过子类进行实例化操作。
       那么能用抽象类做什么呢?
违纪卡
姓名:
李兴华
班级:
小班 1006
时间:
1990-1-2
事由:
上课吃饭
       以后要是取数据的时候,直接从用户填写的地方取,因为上面规定出了是一个模板。
       实际上抽象类就是提供了此种类型的代码结构。
例如:人分为工人和学生,工人和学生都有说话方法,但是说话的内容要由工人或学生决定,所以此时就可以使用抽象类完成此种功能。
abstract class Person{
         private String name ;
         private int age ;
         public Person(String name,int age){
                   this.name = name ;
                   this.age = age ;
         }
         public void say(){
                   System.out.println(this.getContent()) ;
         }
         public String getName(){
                   return this.name ;
         }
         public int getAge(){
                   return this.age ;
         }
         public abstract String getContent() ;
};
class Worker extends Person{
         private float salary ;
         public Worker(String name,int age,float salary){
                   super(name,age) ;
                   this.salary = salary ;
         }
         public String getContent(){
                   return " 工人说  -->  姓名: "+this.getName()+" ,年龄: "+this.getAge()+" ,工资: "+this.salary ;
         }
};
class Student extends Person{
         private float score ;
         public Student(String name,int age,float score){
                   super(name,age) ;
                   this.score = score ;
         }
         public String getContent(){
                   return " 学生说  -->  姓名: "+this.getName()+" ,年龄: "+this.getAge()+" ,成绩: "+this.score ;
         }
};
public class Demo33{
         public static void main(String args[]){
                   Person p = null ;
                   // p = new Student(" 张三 ",20,99.0f) ;
                   p = new Worker(" 张三 ",20,999.0f) ;
                   p.say() ;
         }
};
练习:
       只要是学生进入到班级里来,就一定要喊报告。
       只要是老师进入到班级里来,也一定要说同学们好。
abstract class Person{
         private String name ;
         public Person(String name){
                   this.name = name ;
         }
         public void call(){
                   System.out.println(this.getContent()) ;
         }
         public String getName(){
                   return this.name ;
         }
         public abstract String getContent() ;
};
class Teacher extends Person{
         public Teacher(String name){
                   super(name) ;
         }
         public String getContent(){
                   return " 同学们好,姓名: "+this.getName() ;
         }
};
class Student extends Person{
         public Student(String name){
                   super(name) ;
         }
         public String getContent(){
                   return " 报告,姓名: "+this.getName() ;
         }
};
class Class_{
         public void comeIn(Person p){
                   p.call() ;
         }
};
public class Demo34{
         public static void main(String args[]){
                   Class_ c = new Class_() ;
                   c.comeIn(new Student(" 张三 ")) ;
                   c.comeIn(new Teacher(" 李四 ")) ;
         }
};
       以上的设计模式就称为模板设计。

3.7.2、接口的实际应用

总的使用原则:接口的作用就是将方法名称暴露给远程用户。
       接口与抽象类一样,如果要想正确的时候也需要通过子类进行实例化操作。
如下代码所示:
interface A{
         public void print() ;
}
class B implements A{
         public void print(){
                   System.out.println("Hello World!!!") ;
         }
};
public class Demo35{
         public static void main(String args[]){
                   A a = new B() ;
                   a.print() ;
         }
};
接口的实际应用:定义标准。
       USB接口为例:
interface USB{
         public void start() ;
         public void stop() ;
}
class MainBoard{
         public void plugIn(USB usb){
                   usb.start() ;
                   usb.stop() ;
         }
};
class Mp3 implements USB{
         public void start(){
                   System.out.println("MP3 开始工作。 ") ;
         }
         public void stop(){
                   System.out.println("MP3 停止工作。 ") ;
         }
};
class Print implements USB{
         public void start(){
                   System.out.println(" 打印机开始工作。 ") ;
         }
         public void stop(){
                   System.out.println(" 打印机停止工作。 ") ;
         }
};
public class Demo36{
         public static void main(String args[]){
                   MainBoard mb = new MainBoard() ;
                   mb.plugIn(new Mp3()) ;
                   mb.plugIn(new Print()) ;
         }
};









本文转自 李兴华 51CTO博客,原文链接:http://blog.51cto.com/lixinghua/96921,如需转载请自行联系原作者
目录
相关文章
|
1月前
|
Java 编译器
关于抽象类和接口(详解)
关于抽象类和接口(详解)
31 6
|
1月前
|
程序员 C++
抽象类与接口
抽象类与接口
29 0
|
6月前
|
C++
c++接口(抽象类)
c++接口(抽象类)
55 1
|
6月前
|
Java 编译器
抽象类和接口
抽象类和接口
C++中的抽象类和接口
C++中的抽象类和接口
87 0
|
Java 编译器
07 接口和抽象类
接口 比抽象类更加抽象的是接口,在接口中所有的方法都会被 public abstract 修饰。 注意:Java 8 之后接口中新增加了 default 默认方法和 对 static 方法的支持。 • Java 中不支持多继承,而是通过接口实现比多重继承更强的功能,java 通过接口可以使出于不同层次,甚至不相关的类具有相同的行为. • 接口可以认为是特殊的抽象类, 不能用于直接创建对象。接口的作用在于规定一些功能框架,具体功能的实现则通过该接口约束的类完成。
113 0
抽象类与接口
抽象类 abstract修饰符可以用来修饰方法,也可以用来修饰类,修饰方法就是抽象方法,修饰类就是抽象类 抽象类中可以没有抽象方法,但是抽象方法的类一定要声明为抽象类 抽象类,不能使用new关键字来创建对象,它使用来让子类继承的 抽象方法,只有方法的声明,没有方法的实现,它是用来让子类实现的 子类继
|
存储 API
使用抽象类和接口的优解
使用抽象类和接口的优解   1. 前言 2. 所谓习惯认知 3. 开门见山的万金油 第1条:抽象类设计注重对象性,接口设计注重服务性 第2条:更近的抽象类,更远的接口 第3条:子类间有关系时考虑用抽象类,没有关系时一定要用接口 第4条:版本迭代中优先考虑使用抽象类而不是接口 4. 设计是个性的妥协 5. 参考资料 1. 前言 笔者相信,每个使用面向对象语言的开发者自编码以来,肯定便琢磨过抽象类(Abstract)和接口(Interface)的区别。
872 1