直接看代码
package 学习;
public class Cat extends Animal{
@Override
public void sound() {
System.out.println("miao");
}
public static void main(String[] args) {
Cat cat = new Cat();//有一个cat对象,会发出miao的声音
// Animal animal=new Animal(); 但是这句又是什么意思,有一个animal对象,会发出XX的声音
//有时候我们不行希望Animal被实例化,就把Animal声明abstract抽象类,无法被实例化,只能被继承的子类实例化
cat.setName("cat");
cat.sound();
}
}
package 学习;
public class Animal {
public String name;
public void sound(){
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
抽象类只能由继承的子类来实例化,或者继承的子类继续声明为抽象的
package 学习;
abstract public class Animal {
public String name;
public abstract void sound();//抽象方法
public void setName(String name) {
this.name = name;
}//普通方法
public String getName() {
return name;
}//普通方法
}
抽象类里可以把包含普通方法和抽象方法,抽象方法就是没有{},没有具体的实现,由继承的子类实现重写方法
但是含有抽象方法的类必须为抽象类
一句话:含有抽象方法的类一定是抽象类,但是抽象类不一定含有抽象方法,也可能是普通方法
这时候我们再声明一个Lion类
package 学习;
public class Lion extends Animal{
@Override
public void sound() {
System.out.println("huhuhu");
}
}
这样Animal下有Lion和cat类,我们可以再添加Dog类,Bird类,然后你会发现,除了Lion,其他都可以作为宠物,宠物含有有Pet这方法,就是可以被抚摸,我们想给除了Lion加上这个方法,有三种办法
- 把pet普通方法加入Animal,但是Lion就有了这个方法,但显然这个不是希望被Lion拥有
- pet方法设置抽象的加到animal里面,但是这每个子类都必须重写,很麻烦
- 有没有一种可能让除了lion的子类继承自一个新的Pet类,但是java不允许继承
记住:单继承多接口
interface
package 学习;
public interface Pet {
public void pet();
}
package 学习;
**public class Cat extends Animal implements Pet**{
@Override
public void sound() {
System.out.println("miao");
}
public static void main(String[] args) {
Cat cat = new Cat();//有一个cat对象,会发出miao的声音
// Animal animal=new Animal(); 但是这句又是什么意思,有一个animal对象,会发出XX的声音
//有时候我们不行希望Animal被实例化,就把Animal声明abstract抽象类,无法被实例化,只能被继承的子类实例化
cat.setName("cat");
cat.sound();
}
**@Override
public void pet() {
System.out.println("miaomiao");
}
}**
这样就只在需要pet方法的类加上这个接口,然后重写就好了