抽象类和接口

.一、抽象类

一、抽象类定义和特点

抽象类:abstract关键字修饰的类

抽象方法:abstract关键字修饰的方法

格式:

public abstract class 类名(){

        public abstract  返回值类型  方法名 (【参数】); 

                                代码  

     

}

package test;
//抽象类
public abstract class Animal {
	//抽象方法
	public abstract void eat(); 
	
}

注意:

        (1)抽象方法没有方法体

        (2)一个类中如果有抽象方法,那么该类一定是抽象类 

  二、抽象类成员特点

特点:

(1)抽象方法没有方法体。

(2)抽象类中成员变量可以是变量和常量。

(3)抽象类和抽象方法必须使用abstract关键字。

(4)抽象类中可以不包含抽象方法,有抽象方法的类一定是抽象类。

(5)抽象类中子类要么重写父类中所有的抽象方法,要么子类也是抽象类。

(6)抽象类不是具体的,不能创建对象,但可以参考多态的方式,通过子类创建对象。

(7)抽象类中的方法可以定义抽象方法、成员方法、构造方法、set/get方法和重写后的toString()方法

注意:抽象类中的抽象方法作用:限定子类做什么事

范例代码:

//父类
package test;
//定义抽象类
public abstract class Animal {
	//成员变量
	private String name;
	private int age;
	
	
	//无参构造方法
	public Animal() {
		super();
	}
	
	//有参构造方法
	public Animal(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}
	
	//set/get方法
	public String getName() {
		return name;
	}


	public void setName(String name) {
		this.name = name;
	}


	public int getAge() {
		return age;
	}


	public void setAge(int age) {
		this.age = age;
	}


	//抽象方法
	public abstract void eat();
	
	//成员方法
	public void method() {
		
		System.out.println("昵称:"+this.name+" "+"年龄:"+this.age);
		
	}
}

//子类
package test;
//子类继承父类
public class Cat extends Animal {  
	
	//无参构造方法
	public Cat() {
		super();//继承父类无参构造方法
	}
	
	//有参构造方法
	public Cat(String name, int age) {
		super( name, age); //继承父类有参构造方法
		
	}
	
	//重写父类后的抽象方法
	@Override 	//注解  
	public void eat() {
		System.out.println("猫爱吃鱼");
	}
	
}
//测试类
package test;

public class AnimalTest {

	public static void main(String[] args) {
		
		//抽象类可以参照多态的形式创建对象
		Animal animal = new Cat(); 
		animal.setName("汤姆");
		animal.setAge(4);
		
		//调用父类中的成员方法
		animal.method();
	
		//调用子类重写父类后的抽象方法
		animal.eat();
		
		//有参构造方法
		Animal animal1 = new Cat("加菲",5);
		
		//调用父类中的成员方法
		animal1.method();
		//调用子类重写父类后的抽象方法
		animal.eat();
		
	}

}

二、接口

一、接口的格式和特点

定义:内部所有方法都是抽象方法的类

格式:

        public  interface 接口名{

                        代码

        }

特点:

1.接口是一种特殊的抽象类

2.使用interface关键字声明接口

4.接口中所有的方法都是抽象方法

5.接口命名方法采用大驼峰命名法

package test;

public interface Door {
	
	//开门
	public void openDoor(); //抽象方法
	
	//锁门
	public void closeDoor(); //抽象方法
	
}

二、 类实现接口

格式:

        public  class  类名  implements 接口1,接口2,...,接口n{

                                        代码

        }

特点:

        (1)实现类使用implements关键字实现接口。

        (2)实现类实现接口时要重写接口中的所有抽象方法。

        (3)实现类实现多个接口时,接口和接口之间用逗号隔开。

        (4)抽象类实现接口时,可以不用重写接口中的所有抽象方法。

     

注意:

        实现类和接口之间是是实现关系,类和类之间是继承关系,接口和接口之间是继关系。

范例: 

 Lock接口:

package test;
//接口
public interface Lock {
	
	//抽象方法
	public void openLock();
	
	//抽象方法
	public void closeLock();
}

Door接口:

package test;
//接口
public interface Door {
	
	//抽象方法
	public void openDoor();
	
	//抽象方法
	public void closeDoor();
	
}

实现类:

package test;
//实现类实现接口
public class AntiTheftDoor implements Lock,Door {  //类实现多个接口时,接口和接口之间用逗号隔开
	
	//重写Lock接口中的方法
	@Override
	public void openLock() {
		System.out.println("开锁");
		
	}

	@Override
	public void closeLock() {
		System.out.println("上锁");
		
	}
	
	//重写Door接口中的方法
	@Override
	public void openDoor() {
		System.out.println("开门");
		
	}

	@Override
	public void closeDoor() {
		System.out.println("锁门");
		
	}
	
}

测试类:

package test;
//测试类
public class Test {

	public static void main(String[] args) {
		
		//接口无法直接创建对象
		//Door door = new Door(); 
		
		//接口可以参照多态的方式创建对象
		
		//创建接口引用指向类对象
		Door door = new AntiTheftDoor(); 	
		door.openDoor();  //开门
		door.closeDoor(); //锁门
		
		//创建接口引用指向类对象
		Lock lock = new AntiTheftDoor();
		lock.openLock();  //开锁
		lock.closeLock(); //上锁
	}

}

三、接口中的成员特点 

特点:

(1)接口中的属性全部都是静态常量,默认修饰符 public static final。

(2)接口中所有的方法都是抽象方法,所有方法默认都是 public abstract。

package test;
//接口
public interface Door {
	//属性
	public int height = 2000;
	
	public final int width = 1000;
	
}
package test;
//测试类
public class Test {

	public static void main(String[] args) {
	
		//创建接口引用指向类对象
		Door d = new AntiTheftDoor();
		
		//调用属性
		int result1 = d.height;
		System.out.println(result1); //2000
		
		int result2 = d.width;
		System.out.println(result2); //1000
		
		//赋值
		d.width = 20;    
		d.height = 1000; 
		/* 分析:
		 * 	 width是被final修饰的常量其值固定不变,不能被重新赋值,所以报错!
         *而height量被重新赋值也报错 说明height也是常量,间接说明接口中的量
         *都是常量,默认被final关键字修饰。
		 * */
		
		int result3 = Door.width;
		System.out.println(result3); //2000
		
		int result4 = Door.height;
		System.out.println(result4); //1000
		
		/*分析:
		 * 	 width属性和height属性,可以通过类名调用,可以说明width和height默认
         *被static关键字修饰,只有被static修饰的量才可以通过类名的方式,间接说明
		 *接口中的量默认被static关键字修饰。
		 *
		 * */
		
		/*总结:
		 *(1)接口中的属性全部都是静态常量,默认修饰符 public static final。
		 *(2)接口中所有的方法都是抽象方法,所有方法默认都是 public abstract。
		 * */
		
	}

}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值