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支持多继承吗;分情况,类和类之间是单继承,接口和接口中可以使多继承

类支持多继承吗:不支持

posted @ 2021-01-20 10:56  公雪  阅读(110)  评论(0编辑  收藏  举报