第5章 接口和包
第5章 接口和包
#从安全性和效率角度考虑,java只允许类 的单重继承,但借助于接口,可以实现 多重继承。接口是一组常量和抽象方法 的集合,抽象方法只声明方法头,而没 有方法体。 #包用来组织类和接口,是一组相关类和 接口的集合。包提供了类的访问和保护 管理机制
从安全性和效率角度考虑,java只允许类 的单重继承,但借助于接口,可以实现 多重继承。接口是一组常量和抽象方法 的集合,抽象方法只声明方法头,而没 有方法体。 包用来组织类和接口,是一组相关类和 接口的集合。包提供了类的访问和保护 管理机制
、抽象类和方法 抽象类是供子类继承却不能创建实例的类。用 abstract修饰的类被称为抽象类。抽象类通常包括 个或多个抽象方法(只有方法说明,没有方法体), 抽象类的子类必须完成父类定义的每一个抽象方法, 除非该子类也是抽象类。它的主要用途是用来描述概 念性的内容,这样可以提高开发效率,更好地统一用 户“接口
一、抽象类和方法 抽象类是供子类继承却不能创建实例的类。用 abstract 修饰的类被称为抽象类。抽象类通常包括一 个或多个抽象方法(只有方法说明,没有方法体), 抽象类的子类必须完成父类定义的每一个抽象方法, 除非该子类也是抽象类。它的主要用途是用来描述概 念性的内容,这样可以提高开发效率,更好地统一用 户“接口
定义抽象方法 声明抽象方法需要使用abstract修饰,其一般形式 如下: 【权限修饰符】abstract返回值类型方法名(参数表) 其对于抽象方法不用完成其代码实现,而在派生的 子类中实现所有抽象方法。 其构造方法不能声明为抽象方法。 例如: public abstract area();
定义抽象方法 声明抽象方法需要使用abstract修饰,其一般形式 如下: 【权限修饰符】 abstract 返回值类型 方法名(参数表) 对于抽象方法不用完成其代码实现,而在派生的 子类中实现所有抽象方法。 构造方法不能声明为抽象方法。 例如: public abstract area();
定义抽象类 abstract class 类名称 成员变量, 方法(); 定义一般方法 abstract方法();/定义抽象方法 说明: 1. 抽象类中可以包含有一般方法,也可以包含有抽象方法; 2. 抽象类不能实例化,即使抽象类中没有声明抽象方法,也 不能实例化 3. 抽象类的子类只有给出每个抽象方法的方法体,即覆盖每 个抽象方法后,才能创建子类对象。如果有一个抽象方法 未在子类中被覆盖,该子类也必须被声明为抽象类
定义抽象类 abstract class 类名称 { 成员变量; 方法(); //定义一般方法 abstract 方法(); //定义抽象方法 } 说明: 1. 抽象类中可以包含有一般方法,也可以包含有抽象方法; 2. 抽象类不能实例化,即使抽象类中没有声明抽象方法,也 不能实例化 3. 抽象类的子类只有给出每个抽象方法的方法体,即覆盖每 个抽象方法后,才能创建子类对象。如果有一个抽象方法 未在子类中被覆盖,该子类也必须被声明为抽象类
Java实例 抽象类 public abstract class Shape( public double area(){return 0.0;} public double volume(){return 0.0; public abstract String getName(); public class Point extends Shape{/通过Shape类继承 protected int x,y;//coordinates of the Point public Point(inta,intb){setPoint(a,b):)//带参数的构造器 public void setpoint(int a,int b){ x=a; y-b; public int getx(){return x; public int gety(){return y; public String tostring() {return"["+x+","+y+"]";} public String getName(){return "Point";} //实现抽象方法
Java实例——抽象类 public abstract class Shape{ public double area() { return 0.0; } public double volume() { return 0.0; } public abstract String getName(); } public class Point extends Shape { //通过Shape类继承 protected int x,y; // coordinates of the Point public Point(int a,int b) { setPoint(a,b); } //带参数的构造器 public void setPoint(int a,int b){ x=a; y=b; } public int getX() { return x; } public int getY() { return y; } public String toString() { return "["+x+","+y+"]"; } public String getName() { return "Point"; } //实现抽象方法 }
Java实例— (续) public class Circle extends Point //通过Point类继承 protected double radius; public Circle(double r,int a,int b){ //带参数的构造器 super(a,b); //调用超类构造器 setRadius(r); public void setRadius(double r radius=(r>=0?r:0);) public double getRadius(){return radius; public double area(){return Math.PI*radius*radius; public String tostring() return "Center="+super.tostring()+"Radius="+radius; /引用父类的toString()方法 public String getName(){return "Circle";}
Java实例——(续) public class Circle extends Point { // 通过Point类继承 protected double radius; public Circle(double r,int a,int b){ //带参数的构造器 super(a,b); // 调用超类构造器 setRadius(r); } public void setRadius( double r ) { radius=(r>=0?r:0); } public double getRadius() { return radius; } public double area() { return Math.PI*radius*radius; } public String toString() { return "Center="+super.toString()+"Radius="+radius; } //引用父类的toString()方法 public String getName() { return "Circle"; } }
Java实例一(续) public class Cylinder extends Circle protected double height; //height of Cylinder public Cylinder(double h,double r,int a,int b){ super(r,a,b); setHeight(h); public void setHeight(double h) {height=(h>=0?h:0);} public double getHeight(){return height; public double area(){ return 2*super.area()+2*Math.PI*radius*height; public double volume(){return super.area()*height;} public String tostring() return super.tostring()+"Height="+theight; public String getName(){return "Cylinder";
Java实例——(续) public class Cylinder extends Circle { protected double height; // height of Cylinder public Cylinder(double h,double r,int a,int b){ super(r,a,b); setHeight(h); } public void setHeight(double h) { height=(h>=0?h:0); } public double getHeight() { return height; } public double area(){ return 2*super.area()+2*Math.PI*radius*height; } public double volume() { return super.area()*height; } public String toString() { return super.toString()+"Height="+height; } public String getName() { return "Cylinder"; } }
Java实例 (续) import javax.swing.JOptionPane; public class Show{ public static void main(String args[]){ Point point=new Point(7,11); Circle circle=new Circle(3.5,22,8); Cylinder cylinder=new Cylinder(10,3.3,10,10); Shape arrayofShapes[]=new Shape[3]; arrayofShapes[0]-point; arrayofShapes[1]=circle; arrayofShapes[2]=cylinder; String output=point.getName()+":"+point.tostring()+"\n"+ circle.getName ()+""+circle.tostring ()+"\n"+ cylinder.getName ()+""+cylinder.tostring () JOptionPane.showMessageDialog(null,output,"Demonstrating Polymorphism",JOptionPane.INFORMATION MESSAGE ) System.exit(0 )
Java实例——(续) import javax.swing.JOptionPane; public class Show{ public static void main(String args[]){ Point point=new Point(7,11); Circle circle=new Circle(3.5,22,8); Cylinder cylinder=new Cylinder(10,3.3,10,10); Shape arrayOfShapes[]=new Shape[3]; arrayOfShapes[0]=point; arrayOfShapes[1]=circle; arrayOfShapes[2]=cylinder; String output=point.getName()+":"+point.toString()+"\n"+ circle.getName()+":"+circle.toString()+"\n"+ cylinder.getName()+":"+cylinder.toString(); JOptionPane.showMessageDialog(null,output,"Demonstrating Polymorphism",JOptionPane.INFORMATION_MESSAGE ); System.exit( 0 ); } }
二、接口 接口可以被用来实现类间多继承 结构。接口内部只能定义public的 抽象方法和静态的、公有常量,因 此所有的方法需要在子类中实现
二、接口 接口可以被用来实现类间多继承 结构。接口内部只能定义 public 的 抽象方法和静态的、公有常量,因 此所有的方法需要在子类中实现