抽象类的必要性
class Animal{
String name;
int age;
public void cry(){
System.out.println("unknow"); //这个方法很少能被用到
}
}
不管什么动物 继承了 Animal 以后都会 改写cry方法 所以这个方法 根本没啥必要
abstract class Animal{
String name;
int age;
abstract public void cry();
}
//当一个类继承的父类是抽象类时
//必须把抽象类所有的抽象方法实现
class Cat extends Animal{
public void cry(){
//...什么都不写 也叫实现
}
}
抽象方法不能实现 就是抽象方法 () 后边不能加{}
抽象类 不能创建实例 不能实例化
抽象类 可以没有抽象方法
一个类中包含的方法 被定义为抽象方法 这个类就是抽象类
抽象类里边 可以有普通方法 而不是抽象方法
接口
接口就是给出一些 没有内容的方法,封装到一起,到某个类要使用的时候 根据具体情况把这些方法写出来
语法:
class 类名 implements 接口{
方法; 变量}
public class flow {
public static void main(String[] args) {
Computer computer1= new Computer();
Camera camera1 = new Camera();
Phone phone1= new Phone();
computer1.useUsb(camera1);
computer1.useUsb(phone1);
}
}
interface Usb{
int a=1;
//声明两个方法 开始 停止工作
public void start();
public void stop();
}
class Camera implements Usb{ //一个类 实现了一个接口,必须接口里边的方法 全部实现
public void start(){
System.out.println("camera start");
}
public void stop(){
System.out.println("camera stop");
}
}
class Phone implements Usb{
public void start(){
System.out.println("Phone start");
}
public void stop(){
System.out.println("Phone stop");
}
}
class Computer {
public void useUsb(Usb usb){ //重要!!只要一个类 实现了一个接口 那么这个类的 实例 可以被接口使用
usb.start();
usb.stop();
}
}
1.接口不能实例化
2.接口中所有方法 都不能有主体 (抽象类里边可以有) 方法的主体 就是 { }
3.一个类 可以实现多个接口
4.接口中可以有变量 变量本质上 是 static 和 final的
经常把常用的变量 定义在接口中,作为全局变量使用. 接口名,变量名
5.接口不能继承类 但是可以继承接口
interface fish{
public void swimming();
}
interface bird{
public void fly();
}
class Monkey{
String name;
public void jump(){
System.out.println("会跳");
}
}
class SmallMonkey extends Monkey implements fish,bird {
public void swimming(){
System.out.println("猴子游泳");
}
public void fly() {
// TODO Auto-generated method stub
}
}
实现接口可以在不打破继承关系的前提下,对某个类功能扩展,非常灵活
前期绑定 后期绑定
final
用final 修饰 表示不可以被修改 不可被覆盖
变量用 final 修饰 必须赋初值
父类里边 final 修饰的方法 子类是不能重写的
类 如果用 final修饰 则不能被继承