HeadFirstJava——8_接口与抽象类
2016-07-11 14:32
267 查看
继承只是个开始,要使用多态,还需要接口(这里的接口不是GUI的I代表的接口)。
一、抽象类
1 不该初始化的类
有些类不应该被初始化,即不能”new“出来,如Animal类对象是什么样?
一定要有Animal类继承和产生多态,但要限制只有它的子类才能被初始化。
通过标记类为抽象类,即可告知编译器该类不能创建任何类型的实例。
2 抽象类
抽象类除被继承,是没有用途、没有值、没有目的;
在类的声明的前面加上抽象类关键词abstract;
如下,将Canine类声明为抽象类;
abstract public class Canine extends Animal{
public void roam(){ }
}
public class MakeCanine{
public void go(){
Canine c;
c = new Dog(); // 将子类对象赋值给父类的引用
c = new Canine(); // 因为Canine是抽象类,因此无法实例化,编译不通过
c.roam();
}
}
注意:具体类指不是抽象的类;
3 抽象方法
除类,还可将方法标记为abstract;
抽象的类代表此类必须被extends过,抽象的方法代表此方法必须被覆盖过;
抽象的方法没有实体,直接以分号结束;
public abstract void eat();
声明一个抽象方法,必须将类也标记为抽象类,即不能在非抽象类中拥有抽象方法,但抽象类中可有抽象和非抽象的方法;
在继承树结构下的第一个具体类必须实现所有的抽象方法,也可通过抽象机制将实现的任务交给下层;
4 Object类
在Java中所有类都是Object类直接或间接继承的子类;
编译器通过引用类型来判断有哪些方法可被调用,不是通过对象实际的类型,因此只能在引用变量的类确实有该方法才能调用它;
从ArrayList<Object>取出的对象只能被Object引用,不然就要用类型转换来改变;
Object引用变量在没有类型转换情况下,不能赋值给其他类型,若堆上的对象类型与所要转换的类型不兼容,则次转换会在执行期间产生异常;
二、接口
1 多重继承问题
Java不允许多重继承,因为会有致命方块的问题;
2 接口概念
接口就像100%纯天然抽象类,所有接口的方法都是抽象的;
3 接口定义
使用interface代替class来声明接口,且接口的方法一定是抽象的;
public interface Pet{
public abstract void play();
}
4 接口实现
必须在实现接口的同时,实现接口的所有方法;
public class Dog extends Canine implements Pet{
public void play(){
// ...
}
}
extends只能有一个,implements可以有多个;
public class Dog extends Animal implements Pet, Saveable, Paintable{
// ...
}
一、抽象类
1 不该初始化的类
有些类不应该被初始化,即不能”new“出来,如Animal类对象是什么样?
一定要有Animal类继承和产生多态,但要限制只有它的子类才能被初始化。
通过标记类为抽象类,即可告知编译器该类不能创建任何类型的实例。
2 抽象类
抽象类除被继承,是没有用途、没有值、没有目的;
在类的声明的前面加上抽象类关键词abstract;
如下,将Canine类声明为抽象类;
abstract public class Canine extends Animal{
public void roam(){ }
}
public class MakeCanine{
public void go(){
Canine c;
c = new Dog(); // 将子类对象赋值给父类的引用
c = new Canine(); // 因为Canine是抽象类,因此无法实例化,编译不通过
c.roam();
}
}
注意:具体类指不是抽象的类;
3 抽象方法
除类,还可将方法标记为abstract;
抽象的类代表此类必须被extends过,抽象的方法代表此方法必须被覆盖过;
抽象的方法没有实体,直接以分号结束;
public abstract void eat();
声明一个抽象方法,必须将类也标记为抽象类,即不能在非抽象类中拥有抽象方法,但抽象类中可有抽象和非抽象的方法;
在继承树结构下的第一个具体类必须实现所有的抽象方法,也可通过抽象机制将实现的任务交给下层;
4 Object类
在Java中所有类都是Object类直接或间接继承的子类;
编译器通过引用类型来判断有哪些方法可被调用,不是通过对象实际的类型,因此只能在引用变量的类确实有该方法才能调用它;
从ArrayList<Object>取出的对象只能被Object引用,不然就要用类型转换来改变;
Object引用变量在没有类型转换情况下,不能赋值给其他类型,若堆上的对象类型与所要转换的类型不兼容,则次转换会在执行期间产生异常;
二、接口
1 多重继承问题
Java不允许多重继承,因为会有致命方块的问题;
2 接口概念
接口就像100%纯天然抽象类,所有接口的方法都是抽象的;
3 接口定义
使用interface代替class来声明接口,且接口的方法一定是抽象的;
public interface Pet{
public abstract void play();
}
4 接口实现
必须在实现接口的同时,实现接口的所有方法;
public class Dog extends Canine implements Pet{
public void play(){
// ...
}
}
extends只能有一个,implements可以有多个;
public class Dog extends Animal implements Pet, Saveable, Paintable{
// ...
}
相关文章推荐
- java接口的实现
- [改善Java代码]不推荐使用binarySearch对列表进行检索
- 深入剖析Java中的装箱和拆箱
- [改善Java代码]使用Comparator进行排序
- java多态的实现(二)
- 反射入门
- [改善Java代码]生成子列表后不要再操作原列表
- Java并发编程:线程间协作的两种方式:wait、notify、notifyAll和Condition
- MD5加密算法(JAVA)
- [改善Java代码]推荐使用subList处理局部列表
- Java并发编程:Callable、Future和FutureTask
- java开发中JDBC连接数据库
- Java并发编程:阻塞队列
- java多态的实现(一)
- Java并发编程:并发容器之CopyOnWriteArrayList(转载)
- Java上传文件common-fileupload
- springmvc
- Java并发编程:并发容器之ConcurrentHashMap(转载)
- Java ConcurrentModificationException异常原因和解决方法
- Java并发编程:同步容器