面向对象oop(五)

1.static final常量:

          1)常量必须声明同时初始化

          2)通过类名点来访问,不能改变

          3)建议:常量名所有字母都大写,多个单词用_分隔

          4)常量在编译时被直接替换为具体的值----效率高


2.抽象方法:

        1)由abstract修饰

         2)只有方法的定义,没有方法的实现(连大括号都没有)

3.抽象类:

      1)由abstract修饰

      2)包含抽象方法的类必须是抽象类不包含抽象方法的类也可以声明为抽象----我乐意

      3)抽象类不能被实例化

      4)抽象类是需要被继承的,子类:

            4.1)重写所有抽象方法----------常用

    4.2)也声明为抽象类------------不常用

       5)抽象类的意义:

            5.1)封装所有子类共有的属性和行为-----------代码复用

    5.2)为所有子类提供了一种统一的类型---------向上造型

    5.3)可以包含抽象方法,为所有子类提供统一的入口 子类的具体实现不同,但入口是一致的

4.接口:

  1)是一个标准、规范---------制定方遵守了这个标准,就能干某件事---------API时

  2)接口是一种数据类型(引用类型)

  3)由interface定义,接口中只能包含常量和抽象方法

  4)接口不能被实例化

  5)接口是需要被实现的,实现类/子类:-------遵守方 必须重写接口中的所有抽象方法

  6)一个类可以实现多个接口,用逗号分隔若又继承又实现时,应先继承后实现

  7)接口可以继承接口

package oo.day05;
//求一组图形中的最大面积
public class ShapeTest {
	public static void main(String[] args) {
		//Shape s = new Shape(); //编译错误,抽象类不能被实例化
		Shape[] shapes = new Shape[4]; //创建Shape数组对象
		shapes[0] = new Circle(1);
		shapes[1] = new Circle(2); //大
		shapes[2] = new Square(1);
		shapes[3] = new Square(2);
		maxArea(shapes);
	}
	//求数组的最大面积
	public static void maxArea(Shape[] shapes){
		double max = shapes[0].area();
		int maxIndex = 0; //最大面积下标
		for(int i=1;i<shapes.length;i++){
			double area = shapes[i].area();
			if(area>max){
				max=area;
				maxIndex=i;
			}
		}
		System.out.println("最大面积为:"+max+",所在下标为:"+maxIndex);
	}
}

abstract class Shape{ //抽象类
	protected double c; //周长
	public abstract double area(); //抽象方法
}
class Circle extends Shape{
	public Circle(double c){
		super.c = c;
	}
	public double area(){ //重写抽象方法
		return 0.0796*c*c; //0.0625
	}
}
class Square extends Shape{
	public Square(double c){
		super.c = c;
	}
	public double area(){
		return 0.0625*c*c;
	}
}













package oo.day05;
//银行卡系统
public class UnionPayTest {
	public static void main(String[] args) {
		ICBCImpl card1 = new ICBCImpl(); //工行卡
		ICBC     card2 = new ICBCImpl(); //工行卡
		UnionPay card3 = new ICBCImpl(); //银联卡--工行卡
	}
}

interface UnionPay{ //银联接口
	public double getBalance(); //查询余额
	public boolean drawMoney(double number); //取款
	public boolean checkPwd(String input); //验证密码
}
interface ICBC extends UnionPay{ //工行接口
	public void payOnline(double number); //在线支付
}
interface ABC extends UnionPay{ //农行接口
	public boolean payTelBill(String phoneNum,double sum); //支付电话费
}

class ICBCImpl implements ICBC{ //工行卡
	public double getBalance(){return 0.0;}
	public boolean drawMoney(double number){return true;}
	public boolean checkPwd(String input){return true;}
	public void payOnline(double number){}
}
class ABCImpl implements ABC{ //农行卡
	public double getBalance(){return 0.0;}
	public boolean drawMoney(double number){return true;}
	public boolean checkPwd(String input){return true;}
	public boolean payTelBill(String phoneNum,double sum){return true;}
}

















猜你喜欢

转载自blog.csdn.net/qq_41264674/article/details/80341190