一,Java抽象类是指没有方法主体的方法声明,需要使用abstract关键字来声明。抽象类主要被子类继承的。子类继承抽象类,就可以根据实际的情况来实现抽象类中声明的抽象方法。
二,java中,是通过interface关键字来定义接口的,接口中声明的方法都没有方法体,都是public类型的。类的定义采用implements关键字来实现接口的。
三,接口和抽象类的区别
1, 抽象类可以提供某些方法的部分实现,但是接口不可以的。不可以在接口内提供实现细节。
2,抽象类里面可以有普通的成员变量(就是不加abstract关键字的),但是接口里面不能有普通的成员变量的。
3,抽象类中抽象方法的访问类型可以是public ,protected和默认类型的,但是接口中的抽象方法只能是public类型的,默认为public abstract类型的
4,抽象类中,可以包含静态方法,但是接口是不可以的。
5,抽象类中的静态成员变量的访问类型可以任意的,但是接口的变量只能是public static final的。
6,一个最重要的,就是一个类可以实现多个接口,但是一个类只能继承一个抽象类的。
7,接口更多应用在系统框架设计方法上,主要定义模块之间的通信。抽象类在代码实现方面发挥作用,可以实现代码的重用
下面看一下抽象类和接口的JAVA程序:
抽象类:
Circle.java
package com.duotai1.java;
public class Circle extends Shape
{
public Circle(int r)
{
this.r=r;
}
public void zhouchang()
{
zc=2*Math.PI*this.r;
System.out.println("圆的周长: "+zc);
}
public void mianji()
{
mj=Math.PI*this.r*this.r;
System.out.println("圆的面积为: "+mj);
}
private int r;
private double zc;
private double mj;
}
Shape.java
package com.duotai1.java;
public abstract class Shape
{
public abstract void zhouchang();
public abstract void mianji();
}
Rectangle.java
package com.duotai1.java;
public class Rectangle extends Shape
{
public Rectangle(int a,int b)
{
this.a=a;
this.b=b;
}
public void zhouchang()
{
sum=2*(this.a+this.b);
System.out.println("矩形的周长为: "+sum);
}
public void mianji()
{
mj=this.a*this.b;
System.out.println("矩形的面积为: "+mj);
}
private int a;
private int b;
private int sum;
private int mj;
}
Test.java
package com.duotai1.java;
//import java.awt.Rectangle;
public class Test
{
public static void main(String [] args)
{
/* Rectangle s=new Rectangle(3,4);
s.zhouchang();
s.mianji();
*/
Shape s1=new Rectangle(3,4);
s1.zhouchang();
s1.mianji();
System.out.println("-----------------------");
Shape s2=new Circle(5);
s2.zhouchang();
s2.mianji();
}
}
接口JAVA程序
G3Phone.java
package com.interface2.java;
public interface G3Phone {
public void onLine();
public void videoCall();
public void playOnlineGames();
public void payment();
}
PocketPC.java
package com.interface2.java;
public interface PocketPC {
public void installProgram();
public void runProgram();
public void uninstallProgram();
}
XiaoMiPC.java
package com.interface2.java;
public class XiaoMiPC implements G3Phone, PocketPC {
@Override
public void installProgram() {
// TODO Auto-generated method stub
System.out.println("可以按照程序。");
}
@Override
public void runProgram() {
// TODO Auto-generated method stub
System.out.println("可以运行程序");
}
@Override
public void uninstallProgram() {
// TODO Auto-generated method stub
System.out.println("可以卸载程序");
}
@Override
public void onLine() {
// TODO Auto-generated method stub
System.out.println("可以上网");
}
@Override
public void videoCall() {
// TODO Auto-generated method stub
System.out.println("可以视屏通话");
}
@Override
public void playOnlineGames() {
// TODO Auto-generated method stub
System.out.println("可以玩网游");
}
@Override
public void payment() {
// TODO Auto-generated method stub
System.out.println("可以移动付账");
}
}
Test.java
package com.interface2.java;
public class Test {
public static void main(String [] args)
{
/*G3Phone g=new XiaoMiPC();
g.onLine();
g.videoCall();
g.payment();
g.playOnlineGames();
PocketPC p=new XiaoMiPC();
p.installProgram();
p.runProgram();
p.uninstallProgram();
*/
G3Phone g=new XiaoMiPC();
//PocketPC p=new PocketPC();
Test t=new Test();
t.in(g);
PocketPC p=new XiaoMiPC();
//PocketPC P=new PocketPC();
//t.in1(new PocketPC());
//p.in1(p);
t.in1(p);
}
public void in(G3Phone g)
{
g.onLine();
g.videoCall();
g.playOnlineGames();
g.payment();
}
public void in1(PocketPC p)
{
p.installProgram();
p.runProgram();
p.uninstallProgram();
}
}