Java面向对象05-抽象方法,抽象类和接口
2016-03-19 22:09
691 查看
static final 常量
必须声明同时初始化,不可被改变通过类名.来访问
声明的常量要大写
在编译时直接替换成常量值
俩个修饰符位置可互换
抽象方法
由abstract修饰只有方法的定义,没有方法体—小括号后直接是分号
抽象类
由abstract修饰有抽象方法的类必须用abstract修饰,若类中无抽象方法也可声明为抽象类但无意义
抽象类不能被实例化
抽象类需要被继承,单独存在无意义
1)继承抽象类的子类,需要重写抽象方法
2)继承抽象类的子类也可声明为抽象类—很少用
抽象类的意义
1)封装了一个共有的属性和行为,避免代码重复
2)为所有子类提供一个公共的类型
3)抽象类中可以包含抽象方法—为所有子类提供了一个方法
final和abstract不能同时修饰一个类
接口
接口是一个标准,规范,只有遵守它才能干某一些事接口通过interface来定义
接口只能包含常量和抽象方法
接口不能被实例化
接口是需要被实现/继承的,实现类/子类中必须重写接口中的抽象方法
接口可以继承接口
接口通过implements来实现,一个类可以实现多个接口
若又继承又实现,必须先继承再实现
练习
1.//接口的演示 public class InterfaceDemo { public static void main(String[] args) { /** * 1.声明接口Inter1,包含常量PI和抽象方法a--写完整 * 2.声明接口Inter2,包含a()和b() * 声明类Aoo,实现Inter2 * 3.声明接口Inter3,包含c() * 声明类Boo,实现Inter2和Inter3 * 4.声明抽象类Coo,包含抽象方法d() * 声明类Doo,继承Coo并实现Inter2和Inter3 * 5.声明接口Inter4,继承Inter3,包含e() * 声明类Eoo,实现Inter4 * 6.在main()方法中: * Inter4 o1 = new Inter4()-------??? * Inter3 o3 = new Eoo();---------??? */ //Inter4 o1=new Inter4(); //接口不能被实例化 Inter3 o3 = new Eoo(); //向上造型 } } //接口的定义 interface Inter1{ public static final double PI=3.1415926; //public static final---如果不写则默认提供 public abstract void a(); //public abstract---如果不写则默认提供 } interface Inter2{ public abstract void a(); public abstract void b(); } //接口的实现---重写所有抽象方法 class Aoo implements Inter2{ public void a(){} public void b(){} } interface Inter3{ public abstract void c(); } //一个类可以实现多个接口 class Boo implements Inter2,Inter3{ public void a(){} public void b(){} public void c(){} } //包含抽象方法的抽象类 abstract class Coo{ public abstract void d(); } //先继承后实现 class Doo extends Coo implements Inter2,Inter3{ public void d(){} public void a(){} public void b(){} public void c(){} } interface Inter4 extends Inter3{ public abstract void e(); } class Eoo implements Inter4{ public void e(){} public void c(){} }
2.
//求多种图形最大面积 public class MaxArea { public static void main(String[] args) { Shape[] sh=new Shape[]{new Circle(2),new Circle(3),new Squre(3),new Squre(4)}; maxArea(sh); } public static void maxArea(Shape[] sh){ double max=sh[0].area(); int index=0; for(int i=1;i<sh.length;i++){ if(max<sh[i].area()){ max=sh[i].area(); index=i; } } System.out.println(index+"图形是最大面积,面积是"+max); } } abstract class Shape{ //图形---抽象类 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; } } class Squre extends Shape{ //方形 public Squre(double c){ super.c=c; } public double area(){ return 0.0625*c*c; } }
3.
//银行卡系统(实现银联接口)---工行卡特有在线支付功能,农行卡特有支付电话费功能 import java.util.Scanner; public class UnionPayTest { public static void main(String[] args) { /** *取钱方法(drawMoney(double number)) *查询余额方法(getBalance()) *检验密码方法(checkPwd(String input)) *在线支付方法(payOnline(double num)) *支付电话费方法(payTel(String phoneNum,double calls)) */ Scanner sc=new Scanner(System.in); ICBCImpl icbc=new ICBCImpl(3000,"258"); System.out.print("请输入密码:"); String input=sc.next(); if(icbc.checkPwd(input)){ System.out.print("请输入金额:"); double number=sc.nextInt(); if(icbc.drawMoney(number)){ System.out.println("取钱成功,卡内余额"+icbc.genBalance()); }else{ System.out.println("余额不足!"); } }else{ System.out.println("密码错误!"); } } } //银联接口 interface UnionPay{ public boolean drawMoney(double number); public boolean checkPwd(String input); public double genBalance(); } //工行卡接口 interface ICBC extends UnionPay{ public void payOnline(double num); } //农行卡接口 interface ABC extends UnionPay{ public boolean payTel(String phoneNum,double calls); } //实现工行卡接口 class ICBCImpl implements ICBC{ private double money; //余额 private String pwd; //密码 public ICBCImpl(double money,String pwd){ this.money=money; this.pwd=pwd; } public void payOnline(double num){ if(num>money){ money-=num; } } public boolean drawMoney(double number){ if(number<=money){ money-=number; return true; } return false; } public boolean checkPwd(String input){ if(pwd.equals(input)){ return true; } return false; } public double genBalance(){ return money; } } //实现农行卡接口 class ABCImpl implements ABC{ private double money; private String pwd; public ABCImpl(double money,String pwd){ this.money=money; this.pwd=pwd; } public boolean payTel(String phoneNum,double calls){ if(phoneNum.length()==11&&calls<money){ return true; } return false; } public boolean drawMoney(double number){ if(number-money>=-2000){ money-=number; return true; } return false; } public boolean checkPwd(String input){ if(input.equals(pwd)){ return true; } return false; } public double genBalance(){ return money; } }
相关文章推荐
- java图像压缩
- NIIT实训 java笔记--3.11
- Struts和Hibernate整合中分页实现解析
- EL表达式使用了java保留关键字
- Java Map
- 网页页面自动刷新的3中实现方式
- Java单例你所不知道的事,与Volatile关键字有染
- 创建第一个Spring MVC程序helloworld
- eclipse不能新建server
- 教你如何使用Java泛型
- Java - 常量 - 变量
- Spring相关jar说明
- path、classpath、JAVA_HOME的作用
- Java大牛养成记(3)——SSH框架
- 【转】Java经典问题:传值与传引用?
- Exception in thread "main" java.lang.UnsupportedClassVersionError错误
- NIIT 实训java笔记--3.10
- Java开发编程基础-1
- 【转】Java 中的 i = i++
- JVM之Java程序与内存映射