0120 面向对象2
1、抽象类
当定义了抽象函数的类也必须被abstract关键字修饰,被abstract关键字修饰的类是抽象类。
抽象方法必须在抽象类里边,但抽象类里可以没有抽象方法
抽象类定义格式:
abstract class 类名 {
}
抽象方法定义格式:
public abstract 返回值类型 方法名(参数);
注:抽象方法只有修饰符,返回值,方法名,没有方法主体
例:创建一个抽象类(计算面积,这里求面积是一个共性)
public abstract class Huge {
求面积的抽象方法
public abstract double get();
}
创建一个求圆面积的类,继承这个抽象类
public class Circle extends Huge { private int r; public int getR() { return r; } public void setR(int r) { this.r = r; } public double get() { return r*r*Math.PI; } }
创建一个求正方形的面积的类,继承这个抽象类
public class Square extends Huge { private double a; public double getA() { return a; } public void setA(double a) { this.a = a; } public double get() { return a*a; } }
创建一个测试类
public class Demo01 { public static void main(String[] args) { Circle c=new Circle(); c.setR(2); System.out.println(c.get()); Square s=new Square(); s.setA(3); System.out.println(s.get()); } }
2、接口
借口是功能的集合
借口定义关键字 interface
格式:
public interface 接口名 {
抽象方法1;
抽象方法2;
抽象方法3;
}
类与接口之间的关系是实现关系 关键字 implement
格式:
class 类 implements 接口 {
重写接口中方法
}
接口实例:创建一个smoking接口
public interface Smoking { //修饰符abstract 是固定的 public abstract void smoke(); }
创建一个person抽象类
public class Person implements Smoking{ public void smoke() { System.out.println("人类抽烟"); } }
创建一个猪类
public class Pig implements Smoking{ public void smoke() { System.out.println("猪类抽烟"); } }
上述例子中 smok接口是一个人类和猪类共性
在接口中的变量特点:
在接口中所有的成员变量都是常量,常量一次赋值终生不变,不能不赋值
若在接口中定义一个int a=0 ;实际的书写方式是:
public static final int a=0;
public:公共的,在任何地方都可以访问
static:被static修饰的可以直接使用类名调用类名.属性名
final :最终的,被final修饰的变量叫常量一次赋值,终身不变
接口可以多实现,也就是说,一个类中可以实现多个接口,也可以在继承类的同时来实现多个接口
例:以上述创建somking接口为例
再创建一个drink接口
public interface Drinking { public abstract void drink(); }
创建一个monkey抽象类
//抽象类 public abstract class Monkey { //抽象方法 public abstract void eat(); }
创建一个person类,让这个类继承monkey抽象类,并且实现somk和drink接口(含义是,人类能吃,抽烟和喝酒)
public class Person extends Monkey implements Smoking,Drinking{ public void smoke() { System.out.println("人类抽烟"); } public void drink() { System.out.println("人类喝酒"); } public void eat() { System.out.println("人类吃饭"); } }
创建一个猪类,只让这个类继承monkey类,实现smok接口(含义是,猪类能吃,抽烟,这里并没有实现drink接口,含义是猪类不会喝酒)
public class Pig extends Monkey implements Smoking{ public void smoke() { System.out.println("猪类抽烟"); } public void eat() { System.out.println("猪类吃饭"); } }
注:说明接口是除了类与类之间的共性之外的额外特性的集合,有功能就实现这个接口,没有这个功能就不实现。
接口多继承
学习时发现,类与类之间存在单继承关系,但接口可以使多继承
例:
interface Fu1{ void show(); } interface Fu2{ void show1(); } interface Fu3{ void show2(); } interface Zi extends Fu1,Fu2,Fu3{ void show3(); }
此时,Zi类中存在四个方法
总结:
类和类的关系:继承关系 extends 单继承
类和接口的关系:实现关系 implements 多实现
接口和接口的关系:继承关系 extends 多继承
java支持多继承吗;分情况,类和类之间是单继承,接口和接口中可以使多继承
类支持多继承吗:不支持