类=属性(0/多个)+方法(0/多个—)
一个完整的类可以没有方法,但是有方法时一定要被实现,完整的类可以被实例化(new)
java中隐藏实现内部细节仅向用户显式基本功能的目的叫做java抽象,实现java抽象的方法有两种:【抽象类和接口】
- 抽象类(0%~100%抽象):
定义:一个类有方法,但是未被实现
抽象类声明:用abstract关键字声明抽象类
public abstract class Shape{
int area;
public abstract void AllArea();//声明抽象方法
}
!含有abstract方法一定是抽象类,而含有abstract class类不一定含有abstract方法
例:
package againtry;
public abstract class Shape {
int area;
public abstract void allarea();
}
package againtry;
public class Rectangle extends Shape{
int width;
int length;
public Rectangle(int width,int length) {
this.width=width;
this.length=length;
}
public void allarea() {
System.out.println("计算结果为"+width*length);
}
//实现abstract allare方法,若无该实现,则需要将Rectangle声明为抽象类
public static void main(String[] args) {
Rectangle rect=new Rectangle(5,10);
rect.allarea();
}
}
运行结果
特点:
1.类可以有成员变量,具体方法,抽象方法,构造函数,甚至main函数
2.抽象类只能被继承,一个类继承于抽象类,就不能继承于其他类(包括抽象类)
3.子类可以继承于抽象类,但一定要实现父类的所有抽象方法,只有这样才能变成完整的类;若不能被全部实现,则该子类也必须定义为抽象类
4.抽象类不能被实例化,可以定义为引用变量
如
Shape s=new Circle();//Circle是引用的变量,变量可以是抽象的,对象必须是具体的
5.抽象类和抽象方法常作为系统分析和设计的工具
- 接口(100%抽象)
接口定义:如果一个类的所有方法都没被实现,那么这个类就是接口interface,从本质上来说,接口是特殊的抽象类。
接口声明:关键字interface声明接口
public interface CSystem{
Client add(Client newDairy);
Event add(Evente,Cliebt dairy);
Event[] today();
}
注意:
1.类只可以继承(extends)一个类,但是可以实现(implement)多个接口,继承和实现可以同时存在一个类当中
2.类实现接口,就必须实现所有未实现的方法;如果没有全部实现,那只能成为一个抽象类
3.一个接口可以继承多个接口,没有实现的方法可以叠加,因为接口里的抽象方法不能被实例化,即不占用内存
4.接口中全部的方法所有的方法都是抽象,公开的【public abstract】,所有的属性都是静态的,公开的常量【public static final】,无构造函数,无main方法,但是可以定义变量,变量可以引用任何实现类的实例。
Shape s=new Circle();
package againtry;
/*
* 实现接口
*/
public class Cat {
public void eat() {
System.out.println("Cat:I need to eat some fool~");
}
public void move() {
System.out.println("Cat:I can move by my foot!");
}
public class Climb {
public void climbtree();
}
}
package againtry;
public abstract class LandAnimal implements Animals {
public abstract void eat();
public void move() {
System.out.println("Cat:I can move by my foot!");
}
public class Rabbit extends LandAnimal implements Climb{
public void Climbtree() {
System.out.println("Rabbit:I can climb");
}
public void eat() {
System.out.println("Rabbit:I can eat");
}
}
}
package againtry;
public interface CatFamily extends Animals,Climb {
/*接口中包含:
*eat();
*move();
*climb();
**/
//实现CatFamily中的方法
public class Tiger implements CatFamily{
public void eat() {
System.out.println("Tiger:I need to eat some fool~");
}
public void move() {
System.out.println("Tiger:I can move by my foot!");
}
public void Climb() {
System.out.println("Tiger:I can climb");
}
}
}
- 抽象类域接口的异同
1.抽象类中可以有构造方法,普通成员变量,而接口中都没有
2.抽象类中可以含有非抽象方法,而接口中的所有方法都必须是抽象的
3.抽象类中的抽象方法的访问类型可以是public protected,而接口的抽象方法的类型只能是public abstract
4.抽象类中可以包含静态方法,而接口不能包含抽象方法。
424

被折叠的 条评论
为什么被折叠?



