码迷,mamicode.com
首页 > 编程语言 > 详细

JAVA 抽象类、接口

时间:2015-11-21 21:09:04      阅读:320      评论:0      收藏:0      [点我收藏+]

标签:

一、抽象类

1、语法定义

    在类前面使用 abstract 修饰的类就是抽象类

2、应用场景:

(1)在某些情况下,某个父类只是知道其子类应该包含怎样的方法,但无法准确知道这些子类如何实现这些方法。

(2)从多个具有相同特征的子类中抽象出一个抽象类,以这个抽象类作为子类的模板,从而避免了子类设计的随意性。

3、作用:

    限制规定子类必须实现的某些方法,但不关注实现细节。

4、使用规则:

(1)使用abstract定义抽象类

(2)abstract定义抽象方法,只有声明,不需要实现

(3)抽象类中可包含一般方法,不一定包含抽象方法,但包含抽象方法的类一定要声明为抽象类

(4)抽象类中定义构造方法是多余的

(5)抽象类不能直接创建,可以定义引用变量

(6)abstract 不能与private、static、final、或native并列修饰同一方法

(7)若一个类被定义为抽象类,则该类就不能用new运算符创建具体实例对象,而必须用覆盖的方式来实现抽象类中的方法

 

如对于几何形状,是一个抽象的概念,由此可派生出"长方形"、“圆形”等具体的几何形状,所以把形状(Shape)定义为抽象的父类。此外,如果要规定每个形状类都编写计算其面积和长度的方法。由于每个具体的几何形状的面积和周长计算方法不同,所以放在父类不恰当。可以将其定义为抽象方法,具体处理方式放在子类中定义

public class demo1 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Shape rec = new Rectangle("长方形", 3.5, 5); //声明父类对象,指向子类对象
		System.out.print("面积="+rec.getArea());
		System.out.println("周长="+rec.getLength());
		Circle cir = new Circle("圆", 3.5);
		System.out.print("面积="+cir.getArea());
		System.out.print("周长="+cir.getLength());
		
	}
}

abstract class Shape{              //定义抽象类Shape
	protected String name;
	public Shape(String xm)
	{
		name = xm;
		System.out.println("名称:"+name);
	}
	abstract public double getArea();   //声明抽象方法
	abstract public double getLength();
}

class Circle extends Shape  //定义继承来自Shape的子类Circle
{
	private final double PI = 3.14;
	private double radius;
	public Circle(String shapeName,double r) //构造方法
	{
		super(shapeName);
		radius=r;
	}
	public double getArea() {
		return PI*radius*radius;
	}
	public double getLength() {
		return 2*PI*radius;
	}
	
}

class Rectangle extends Shape    //定义继承来自Shape的子类Rectangle
{
	private double width;
	private double height;
	public Rectangle(String shapeName,double width,double height)
	{
		super(shapeName);
		this.width = width;
		this.height = height;
	}
	public double getArea() {

		return width*height;
	}
	public double getLength() {

		return 2*(width+height);
	}
}

 

二、接口

1、接口定义

      接口定义了某一批类所需要遵守的规范,接口不关心这些类的内部数据,也不关心这些类方法的具体实现,它只规定这些类里必须提供的某些方法。

      接口实际上就是一种特殊的抽象类。

2、定义方法:

      使用 interface 关键字:

[修饰符]  interface 接口名[extends 父接口1,父接口2……]
{
    0个~多个常量定义
    0个~多个抽象方法定义
}

3、接口定义:

      接口中的方法只能是抽象方法,总是使用,即使定义时不添加public  abstract修饰符,系统也是默认加上的。

4、使用接口:

(1)接口的数据成员必须初始化

(2)接口中的方法必须全部声明为 abstract ,接口的方法必须全部是抽象方法

技术分享格式固定,不能改变extends和Implements顺序的调换。

生成接口:

技术分享

技术分享

也可以自己写

技术分享
 1 public class demo1 {
 2     /**
 3      * @param args
 4      */
 5     public static void main(String[] args) {
 6         IShape cir = new Circle(3.5);
 7         System.out.print("面积="+cir.getArea());
 8         System.out.println("周长="+cir.getLength());
 9         Rectangle rec = new Rectangle(3.5, 5); //声明父类对象,指向子类对象
10         System.out.print("面积="+rec.getArea());
11         System.out.println("周长="+rec.getLength());
12         
13     }
14 }
15 
16 interface IShape {
17     final double PI = 3.14;
18     abstract double getArea();  //声明抽象方法
19     abstract double getLength();
20 
21 }
22 
23 
24 
25 class Circle implements IShape  //以IShape接口来实现Circle类
26 {
27     private double radius;
28     public Circle(double r) //构造方法
29     {
30         this.radius=r;
31     }
32     public double getArea() {
33         return PI*radius*radius;
34     }
35     public double getLength() {
36         return 2*PI*radius;
37     }
38     
39 }
40 
41 class Rectangle implements IShape  //以IShape接口来实现Circle类
42 {
43     private double width;
44     private double height;
45     public Rectangle(double width,double height)
46     {
47         this.width = width;
48         this.height = height;
49     }
50     public double getArea() {
51 
52         return width*height;
53     }
54     public double getLength() {
55 
56         return 2*(width+height);
57     }
58 }
View Code

5、接口的继承:

       与类相似,接口也有继承性,定义接口时可通过extend关键字声明该新接口是某个已存在父接口的子接口,将继承父接口的所有变量和方法。

       与类的继承不同的地方是,一个接口可以有一个以上的父接口,之间用“,”隔开。若子接口中定义了与父接口同名的常量或者相同方法,将覆盖。

 

三、内部类与匿名类

        内部类是定义在类中的类,主要作用是将逻辑上相关的类放在一起;而匿名类是一种特殊的内部类,没有类名,在定义类的同时,就生成该类的实例,由于不会再其他地方用到该类,所以不用取名字。

 

JAVA 抽象类、接口

标签:

原文地址:http://www.cnblogs.com/Kevin127/p/4984539.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!