JAVA学习之抽象类和接口

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)要继承一个抽象类或者实现一个接口,都必须实现之中的抽象方法;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值