您的位置:首页 > 编程语言 > Java开发

JAVA学习之抽象类和接口

2012-03-19 21:29 399 查看

JAVA接口和抽象了简单介绍:

1.抽象类:具有抽象方法的类,叫做抽象类。抽象方法:申明方法,但不实现,没有方法体。对于抽象类不能实例化,只能申明; 只能通过其子类来实现;

public class AbstractDemo {
public static void main(String[] args) {
A a =null;//编译不报错
a=new A();//无法实例化,错误
}
}
abstract class A{
abstract void fun();
}


当子类是抽象类的是可以不用重写父类的方法;若不是就必须实现父类的全部的抽象方法;

注意:1).子类覆写父类的方法的时候要注意,子类方法的访问权限一定要大于等于父类的方法的访问权限;

2).抽象类不能用final修饰;

3).抽象类中允许有构造方法;但此构造方法不能直接调用,必须通过子类调用;子类对象实例化的过程,总是先去调用父类的构造方法;

2.接口:接口是一个特殊的抽象类,有抽象方法和全局常量组成;

注意:1).一个类可以实现多个接口; A implement B,C

2).一个类既要继承一个抽象类,又要实现一个接口:calss 子类 extends 抽象类 implement 接口A,接口B{}

3).一个抽象类可以实现多个接口,但是一个接口不能继承抽象类;但是一个接口可以继承多个接口;

3.抽象类的应用;抽象类的最大的应用就是模板设计;

假设:人分为两种:工人和学生;

1)工人和学生都有姓名和年龄,但是工人有工资,学生有成绩;

2)工人和学生都可以说话,但是说话的内容部一样;

代码如下:

abstract class Person{
private String name;
private int age;
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setAge(int age) {
this.age = age;
}
public int getAge() {
return age;
}
public abstract void say();
}
class Student extends Person{
public Student(String name, int age,int score) {
super(name, age);
this.score=score;
}
private int score;
public void setScore(int score) {
this.score = score;
}
public int getScore() {
return score;
}
@Override
public void say() {
System.out.println("学生说:"+"\t"+"姓名是:"+super.getName()+"\t"+"

年龄是:"+
super.getAge()+"\t"+"成绩是:"+this.getScore());
}
}
class Teacher extends Person{
private int salary;
public Teacher(String name, int age,int salary) {
super(name, age);
this.salary=salary;
}
@Override
public void say() {
System.out.println("工人说:"+"\t"+"姓名是:"+super.getName()+"\t"+"

年龄是:"+super.getAge()+
"\t"+"工资是:"+this.getSalary());
}
public void setSalary(int salary) {
this.salary = salary;
}
public int getSalary() {
return salary;
}
}
public class AbstractDemo {
public static void main(String[] args) {
Person p1=new Student("张三", 25, 59);
Person p2=new Teacher("李四", 23, 998);
p1.say();
p2.say();
}
}


4.接口的应用:接口实际上是作为一个标准存在;例如:电脑实现了USB接口,打印机,U盘等等都实现了此标准;

interface Friut{
public void eat();
}
class Apple implements Friut{
public void eat(){
System.out.println("吃苹果。。。。");
}
}
class Orange implements Friut{
public void eat(){
System.out.println("吃橘子。。。。");
}
}
class Factory{
public static Friut getFriut(String s){
Friut f=null;
if ("Apple".equals(s)) {
f=new Apple();
}else if("Orange".equals(s)) {
f=new Orange();
}
return f;
}
}
public class Test01 {
public static void main(String[] args) {
Friut f=Factory.getFriut(args[0]);
if (f!=null) {
f.eat();
}
}
}


5.接口和抽象类的区别和联系:

1)抽象类由抽象方法、普通方法、常量、变量、构造方法、全局常量等构成;而接口只能由抽象方法和全局常量组成;

2)定义抽象类用关键字abstract,定义接口用关键字interface;

3)子类用关键字extends继承抽象类,实现类用implements实现接口;

4)一个子类只能继承一个抽象类;而一个子类可以同时实现多个接口;

5)一个抽象类可以实现一个接口,而一个接口不能继承一个抽象类;

6)一个抽象类中允许包含多个接口,一个接口中也可以包含多个抽象类;

7)要继承一个抽象类或者实现一个接口,都必须实现之中的抽象方法;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: