Java抽象类和接口
来源:互联网 发布:java垃圾回收机制算法 编辑:程序博客网 时间:2024/05/16 09:04
如何使用接口和抽象类,分析它们之间相似性和差异。
1- 介绍
2- 抽象类
3- 抽象类,实例
4- 接口
4.1- 接口结构
4.2- 类实现接口
1- 介绍
在本文中,我们将学习如何接口和抽象类,也是来分析它们之间相似性和差异。
2- 抽象类
对于抽象类,使用关键字 abstract 来创建一个类。 例如:
// This is an Abstract class.// It must be declared as abstract because it has an abstract method.public abstract class ClassA { // This is an abstract method // It has no body. // Its access modifier is public public abstract void doSomething(); // Access modifier of this method is protected protected abstract String doNothing(); // This method does not declare access modifier // It has the default access modifier. abstract void todo() ;}// This is an abstract class// It is declared as abstract, though it does not have any abstract methods.public abstract class ClassB {}
3- 抽象类,实例
参见如下图:
- AbstractJob.java
package com.yiibai.tutorial.abs;// An abstract class (Simulating a job).// There are two methods declared abstractpublic abstract class AbstractJob { public AbstractJob() { } // This is an abstract method. // return Job Name. public abstract String getJobName(); // This is an abstract method. public abstract void doJob();}
- JavaCoding.java
package com.yiibai.tutorial.abs;// Class implements all abstract methods of the parent class.public class JavaCoding extends AbstractJob { public JavaCoding() { } // Implements abstract method of parent. @Override public void doJob() { System.out.println("Coding Java..."); } // Implements abstract method of parent. // Method with body. // Return name of Job. @Override public String getJobName() { return "Coding Java"; }}
- ManualJob.java
package com.yiibai.tutorial.abs;// AbstractJob has two abstract methods.// This class implements only one abstract method of parent class.// Therefore it must be declared as abstract.public abstract class ManualJob extends AbstractJob { public ManualJob() { } // Implements abstract method of parent class. @Override public String getJobName() { return "Manual Job"; }}
- BuildHouse.java
package com.yiibai.tutorial.abs;// This class inherited from ManualJob// Build House undeclared abstract,// so it must implement all remaining abstract methods.public class BuildHouse extends ManualJob { public BuildHouse() { } // Implements abstract methods of the parent class. @Override public void doJob() { System.out.println("Build a House"); }}
示例如下:
- JobDemo.java
package com.yiibai.tutorial.abs;public class JobDemo { public static void main(String[] args) { // Create AbstractJob // from Constructor of JavaCoding. AbstractJob job1 = new JavaCoding(); // Call doJob() method. job1.doJob(); // getJobName is the abstract method in AbstractJob. // But it was implemented in a certain subclass (JavaCoding). // So can call it String jobName = job1.getJobName(); System.out.println("Job Name 1= " + jobName); // Create AbstractJob object // from constructor of BuildHouse. AbstractJob job2 = new BuildHouse(); job2.doJob(); String jobName2 = job2.getJobName(); System.out.println("Job Name 2= " + jobName2); }}
运行示例结果如下:
Coding Java...Job Name 1= Coding JavaBuild a HouseJob Name 2= Manual Job
4- 接口
我们知道,一个类只能从一个父类扩展。
public class B extends A { // ....} public class B {} public class B extends Object {}
但是,一个类可以扩展多个接口。
// a class can extends from only one parent class.// But can extends from multiple Interfaces.public class Cat extends Animal implements CanEat, CanDrink { // ....}
4.1- 接口结构
- NoAccessModifierInterface.java
package com.yiibai.tutorial.itf;// This is an interface not specified access modifier.// Only classes in the same package can implements this interface.interface NoAccessModifierInterface {}
- CanMove.java
package com.yiibai.tutorial.itf; public interface CanMove {public abstract void run();// Method in interface is always public abstractvoid back();// Method in interface is always public abstractpublic int getVelocity();}
- CanDrink.java
package com.yiibai.tutorial.itf; public interface CanDrink { public static final String PEPSI = "PEPSI";// Fields in Interface is always public static final.final String NUMBER_ONE = "NUMBER ONE";// Fields in Interface is always public static final.String SEVENUP = "SEVEN UP";public void drink();}
- CanEat.java
package com.yiibai.tutorial.itf; public interface CanEat { public void eat();}
4.2- 类实现接口
- Animal.java
package com.yiibai.tutorial.cls;import com.yiibai.tutorial.itf.CanMove;// This class extends from Object.// And implements CanMove interface.// CanMove has 3 abstract methods.// This class implements only one abstract method of CanMove.// Therefore it must be declared as abstract.// The remaining abstract methods to be implemented in the subclasses.public abstract class Animal implements CanMove { // Implements run() method of CanMove. @Override public void run() { System.out.println("Animal run..."); }}
- Cat.java
package com.yiibai.tutorial.cls;import com.yiibai.tutorial.itf.CanDrink;import com.yiibai.tutorial.itf.CanEat;// This class extends Animal and implements CanEat, CanDrink interfaces.// This class not declared as abstract.// So it must implements all abstract methods of the interfaces.public class Cat extends Animal implements CanEat, CanDrink { private String name; public Cat(String name) { this.name = name; } public String getName() { return this.name; } // Implements method of CanMove @Override public void back() { System.out.println(name + " cat back ..."); } // Implements method of CanMove @Override public int getVelocity() { return 110; } // Implements method of CanEat @Override public void eat() { System.out.println(name + " cat eat ..."); } // Implements method of CanDrink @Override public void drink() { System.out.println(name + " cat drink ..."); }}
- Mouse.java
package com.yiibai.tutorial.cls;import com.yiibai.tutorial.itf.CanDrink;import com.yiibai.tutorial.itf.CanEat;public class Mouse extends Animal implements CanEat, CanDrink { @Override public void back() { System.out.println("Mouse back ..."); } @Override public int getVelocity() { return 85; } @Override public void drink() { System.out.println("Mouse drink ..."); } @Override public void eat() { System.out.println("Mouse eat ..."); }}
- AnimalDemo.java
package com.yiibai.tutorial.cls;import com.yiibai.tutorial.itf.CanEat;public class AnimalDemo { public static void main(String[] args) { // Inherit static field of CanDrink System.out.println("Drink " + Cat.SEVENUP); // Create CanEat object // from constructor of Cat. CanEat canEat1 = new Cat("Tom"); // An object declared as CanEat. // But it is a Mouse CanEat canEat2 = new Mouse(); // Polymorphism shown here. // Java know the actual types of objects // ==> Tom cat eat ... canEat1.eat(); // ==> Mouse eat ... canEat2.eat(); boolean isCat = canEat1 instanceof Cat; System.out.println("catEat1 is Cat? " + isCat); // Cast if (canEat2 instanceof Mouse) { Mouse mouse = (Mouse) canEat2; // Call drink method (Inherited from CanDrink). mouse.drink(); } }}
Drink SEVEN UPTom cat eat ...Mouse eat ...catEat1 is Cat? trueMouse drink ...
0 0
- Java 抽象类,抽象方法和接口
- Java抽象类和抽象方法、接口
- Java接口和抽象类
- java接口和抽象类
- java 接口和抽象类
- java接口和抽象类
- JAVA抽象类和接口
- java抽象类和接口
- java抽象类和接口
- Java:抽象类和接口
- java接口和抽象类
- Java 抽象类和接口
- JAVA抽象类和接口
- java抽象类和接口
- java接口和抽象类
- JAVA抽象类和接口
- Java抽象类和接口
- java 抽象类和接口
- bzoj 2442 [Usaco2011 Open]修剪草坪
- Java继承和多态
- Java学习之Apache poi
- MYSQL2字段属性
- spoj DQUERY - D-query(区间不同数的个数 主席树 or BIT)
- Java抽象类和接口
- jvm面试题(六)
- 贪吃蛇的Java实现
- 51nod 1138 连续整数的和
- hdu 2059 龟兔赛跑
- Java修饰符
- 简单理解单例模式
- Java枚举
- V1.0.0 Python可以做什么