抽象类和接口

1.抽象类

1.1什么是抽象类

一个类中如果有抽象方法,那么该类一定是抽象类;抽象类不一定存在抽象方法。

抽象类和抽象方法必须要用关键字:abstract(抽象的)修饰

注:abstract关键字不能和那些关键字一块使用

final   、private   、 static...

1.2没有抽象方法的抽象类有什么作用

一个类中没有抽象方法,那么这个类可以不可以定义为抽象类?意义是什么?

可以,不能让当前类直接进行实例化,需要通过一些静态功能来间接实例化!

1.3抽象类的格式

//抽象类
public abstract class 类名{

    //抽象方法
    public abstract void 方法名();
}

 1.4抽象类的特点

1)抽象类不能实例化

抽象类如何实例化?

按照多态的方式,由具体的子类实例化。称为:抽象类的多态

//抽象类
class abstract Animal{
    //抽象方法
    public abstract void eat();  
}
//抽象类的子类
class Dog extends Animal{  //extends :继承自...
    //必须重写抽象类中的抽象方法
    public void eat(){
        System.out.println("狗吃骨头...");
    }
}

//测试类
class Test{

    public static void mian(String args[]){
        //抽象类的多态
        Animal a = new Dog();
    }

}

2)抽象类的成员特点

2.1)成员变量:可以是变量,也可以是常量

2.2)构造方法:有构造方法,但不能实例化,用于子类访问父类数据的初始化

3.3)成员方法:可以是抽象方法:限定子类必须完成某些功能  也可以是非抽象方法。

1.5练习

//测试类
public class Test {
	public static void main(String[] args) {
		
		//测试狗
		//抽象类多态
		Animal a = new Dog() ;//向上转型
		a.setName("小白");
		a.setAge(3);
		a.setColor("白色");
		System.out.println(a.getName()+"---"+a.getAge()+"---"+a.getColor());
		a.eat();
		a.sleep();
		//a.playGame() ;
		
		//向下转型
		Dog d = (Dog)a;
		d.playGame();
		System.out.println("--------------------------");
		
		//抽象类多态:
		Animal a2 = new Dog("小白2",5,"白色") ;//向上转型
		System.out.println(a2.getName()+"---"+a2.getAge()+"---"+a2.getColor());
		a2.eat();
		a2.sleep();
		Dog dd = (Dog)a2;
		dd.playGame();
	}
}


//抽象的动物类
abstract class Animal {

	//属性私有化
	private String name ;
	private int age ;
	private String color ;
	
	public Animal() {
		super();
	}
	//有参构造方法
	public Animal(String name, int age, String color) {
		super();
		this.name = name;
		this.age = age;
		this.color = color;
	}
	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 String getColor() {
		return color;
	}
	public void setColor(String color) {
		this.color = color;
	}
	
	//吃和睡 的动作给出一个声明
	public abstract void eat() ;
	public abstract void sleep() ;
	
	
	
	
}

//猫类
class Cat extends Animal {

	
	
	public Cat() {
		super();
	}

	public Cat(String name, int age, String color) {
		super(name, age, color);
	}

	@Override
	public void eat() {
		System.out.println("猫吃鱼");
	}

	@Override
	public void sleep() {
		System.out.println("猫趴着睡觉...");
	}
	
	public void catchMouse() {
		System.out.println("猫抓老鼠...");
	}

}
//狗类
class Dog extends Animal {

	
	public Dog() {
		super();
	}

	public Dog(String name, int age, String color) {
		super(name, age, color);
	}

	@Override
	public void eat() {
		System.out.println("狗吃骨头...");
	}

	@Override
	public void sleep() {
		System.out.println("狗侧睡...");
	}
	public void playGame() {
		System.out.println("狗可以玩猫...");
	}

}

                         

2.接口

2.1什么是接口

Java中的一些额外功能,并不给出具体实现,将包含这些额外功能的称为接口

2.2接口的特点

接口用关键字interface 表示

接口的格式和实例化

interface Inter{
    //接口中只能定义抽象方法
    void jump();  //接口中的抽象方法隐藏了 public abstract  等修饰符
}

class Dog implenents Inter{
    
    //必须重写接口中的方法
    public void jump(){
        System.out.println("狗经过训练学会跳了...");
    }
} 

//测试了
public class Test{
    public static void main(String args[]){
        Dog d = new Dog();
        d.jump();
    }

}

 接口不能实例化,如何实例化接口

按照多态的方式,由具体的子类实例化。其实这也是多态的一种,接口多态。

2.3接口成员特点

1)成员变量:这能是常量:有默认修饰符:public static final

2)构造方法:没有构造方法,因为接口主要是扩展功能的,而没有具体存在

3)成员方法:只能是抽象方法 :默认修饰符:public abstract

3.抽象类与接口的比较

3.1类与类,类与接口,接口与接口的关系

1)类与类:继承关系只能单继承,但是可以多层继承

2)类与接口:可以单实现,也可以多实现。还可以在继承一个类的同时实现多个接口

3)接口与接口:可以单继承关系,也可以多继承

3.2抽象类和接口的区别

1)成员区别

抽象类:变量,常量;可以有抽象方法,构造方法,非抽象方法

接口:常量,抽象方法

2)关系区别

 类与类 继承,单继承

类与接口 实现,单实现,多实现

接口与接口 继承,单继承,多继承

3)设计理念区别

抽象类:被继承体现的是一种“is a ”的关系

接口:被实现体现的是:“like a ”的关系。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值