Java面向对象(包,抽象类,接口)
前言:这是我在学习Java过程中的一点小结和学习方法,希望能对看到这些东西的你有一些帮助,不足之处,还有很多理解不是很深刻的地方,请指教哦!!
一:包的使用
我们都知道在windows下的同一个文件夹中,我们是不可以创建多个同名的文件的,但这些同名的文件位于不同得分文件夹,就不会相互冲突了,因为它们的路径是不同的。同样的道理在Java源文件也需要类似文件夹的机制来管理可能相同的类文件。
1.1 创建包
在创建包命名规范,如:org.chong.javabean 使用小写字母,一般是公司域名的反写。如apache公司域名为:http://www.apache.org,所以apche公司的java产品的命名规范为 org.apache.org.xx。包名在文件目录中表示文件目录,如org.chong.javabean,在Windows文件目录表示org\chong\javabean。
比较重要的还是对抽象类和接口的理解了…
二:抽象类
知道继承后,定义一个基类,在此中定义一个抽象的方法(虚方法),即不提供具体实现方法,交由子类实现,要想把一个方法写为抽象方法,需要在方法前加上abstract关键字,且方法没有方法体,如果某类有方法是抽象方法,那么这个类必须定义为抽象类。
对于抽象类,总结出来如下:
- 如果一个类是一个abstract类的子类,它必须具体实现父类的abstract 方法,否则子类也是抽象类。
- 如果一个类中含有abstract方法,那么这个类必须用abstract 来修饰(抽象类也可以没有abstract方法)。
- 一个abstract 类只关心它的子类是否具有某种功能,并不关心功能的具体行为,功能的具体行为由子类负责实现,所以抽象类可以实现类型隐藏。
- 由于抽象类具有未实现的方法,所以不能创建对象,但可引用子类对象。
- 不能定义一个既是final的又是abstract的类,因为这是自相矛盾的。
更直观一点来说:用代码来表示=======》
图像(Shape)类代码://基类
/************************************
*
* @author chong
* 抽象类的定义
* 抽象类是不能实例化的
*/
public abstract class Shape {
// 图像的名称
public String shapeName;
// 无参数的构造方法
public Shape() {
}
// 有参数的构造方法
public Shape(String shapName) {
this.shapeName = shapName;
}
// 抽象方法
public abstract double getArea();
public void showShape() {
System.out.println("正在操作的图形为:" + shapeName);
}
}
圆形(Circle)代码:
/**************************************
*
* @author chong
*圆形
*/
public class Circle extends Shape {
// 半径
private double radius;
private static final double PI = 3.1415926;
public Circle() {
}
public Circle(String shapeName,double radius) {
super(shapeName);
this.radius = radius;
}
/************************
* 圆形面积
*/
public double getArea() {
System.out.println("圆形面积为:" + PI * radius * radius);
return PI * radius * radius;
}
}
长方形(Rectangle)代码:
/************************************
*
* @author chong
* 长方形类 继承 图像类
*
*/
public class Rectangle extends Shape{
// 宽
private double width;
// 长
private double length;
public Rectangle() {}
public Rectangle(String shapeName,double width,double length) {
super(shapeName);
this.width = width;
this.length = length;
}
/*************************
* 实现抽象类方法:求长方形面积
*/
public double getArea() {
System.out.println("长方形的面积为:" + width * length);
return width * length;
}
}
三角形(Triangle)代码:
/********************************
*
* @author chong 三角形类 继承 图书类
*/
public abstract class Triangle extends Shape {
private double border;
private double heigth;
public Triangle() {
}
public Triangle(String shapeName, double border, double heigth) {
super(shapeName);
this.border = border;
this.heigth = heigth;
}
// 抽象方法未实现
public abstract double getArea();
}
测试代码:
/*****************************
*
* @author chong 图像测试
*
*/
public class ShapeTest {
public static void main(String[] args) {
// 实例化图像
// Shape shape = new Shape(); // 抽象类是不能实例化 错误代码
Circle cirCleShap = new Circle("圆形", 10);
testGetArea(cirCleShap);
Rectangle r = new Rectangle("长方形", 10, 20);
testGetArea(r);
}
public static void testGetArea(Shape shape) {
System.out.println(shape.shapeName + "的面积是:" + shape.getArea());
}
}
三:接口
与之前学过的普通类与抽象类不同,接口使用的关键字不再是class(确切地说,接口只是一个规范,不再是一个有具体功能实现的类)。定义一个接口需要使用interface关键字,接口的定义语法如下:
[public] interface 接口名[extends 父接口]
类型 常量字段名=值;
返回类型 方法名(参数列表)
}
最重要的就是接口和抽象类的区别啦!!
相同点:
1、不能实例化
2、抽象类只有继承后并提供抽象的具体实现,接口必须实现对应的方法 才能调用;
不同点:
1、抽象类中可能有非抽象方法,但接口只有方法的声明,没有实现
2、接口中变量一定共有的常量,方法的定于必须为共有的,但抽象类可以定于私有属性或者方法