继承、方法重写、多态
使用继承优化设计将重复代码抽取到父类中
使用继承编写父类class Engineer {
//公共的属性和方法
}
编写子类,继承父类
class SoftEngineer extends(只能继承一个父类) Engineer {
//子类特有的属性和方法
}
子类访问父类成员 使用super关键字
访问父类属性 super.name;
super代表父类对象
访问父类方法
super.print();
有些父类成员不能继承
子类不能访问父类private成员
子类与父类不在同包,使用默认权限的成员
构造方法
访问修饰符protected
可以修饰属性和方法
本类、同包、子类可以访问
方法重写的规则
在继承关系的子类中
重写的方法名、参数、返回值类型必须与父类相同
私有方法不能继承因而也无法重写
abstract也可用于方法——
抽象方法
抽象方法没有方法体
抽象方法必须在抽象类里
抽象方法必须在子类中被实现,除非子类是抽象类
public abstract void play() 没有方法体
static可以用来修饰属性、方法和代码块
static修饰的属性和方法称为类属性(类变量)、类方法
不使用static修饰的属性和方法,属于单个对象,通常称为实例属性(实例变量)、实例方法
static修饰的变量和方法可以通过类名和对象名访问,而不用static修饰的变量和方法只能通过对象名访问
final用法
父类调用子类方法:
练习图形面积
车型 别克商务舱GL8 宝马550i 别克林荫大道 座位 <=16座 >16座
日租费(元/天) 600 500 300 日租费(元/天)800 1500
package Carteacher;
public abstract class Moto {
public abstract double calePrice(int days);
}
package Carteacher;
public class Bus extends Moto {
private int seatCount;
public Bus() {
super();
// TODO Auto-generated constructor stub
}
public Bus(int seatCount) {
super();
this.seatCount = seatCount;
}
public int getSeatCount() {
return seatCount;
}
public void setSeatCount(int seatCount) {
this.seatCount = seatCount;
}
@Override
public double calePrice(int days) {
// TODO Auto-generated method stub
double money=0;
if (seatCount<=16) {
money=800*days;
}else{
money=1600*days;
}
return money;
}
}
package Carteacher;
public class Car extends Moto{
private char type;
private final char GL8='A';
private final char BMW='B';
private final char GM='C';
public Car() {
super();
// TODO Auto-generated constructor stub
}
public Car(char type) {
super();
this.type = type;
}
public char getType() {
return type;
}
public void setType(char type) {
this.type = type;
}
@Override
public double calePrice(int days) {
// TODO Auto-generated method stub
double money=0;
switch (type) {
case GL8:
money=600*days;
break;
case BMW:
money=500*days;
break;
case GM:
money=300*days;
break;
default:
break;
}
return money;
}
}
package Carteacher;
import java.util.Scanner;
public class Test {
public double calePrice(Moto mv,int days){
return mv.calePrice(days);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Test test=new Test();
Scanner sc=new Scanner(System.in);
System.out.println("请选择车型*1*轿车:*2*客车");
int a=sc.nextInt();
if (a==1) {
System.out.println("请选择车型 A别克林 B宝马 C别克商");
String str=sc.next();
char type=str.charAt(0);
System.out.println("请输入天数");
int days=sc.nextInt();
Car car=new Car(type);
double money=test.calePrice(car, days);
System.out.println(type+"轿车"+money+"元租用"+days+"天");
}else if (a==2) {
System.out.println("请输入座位数");
int n=sc.nextInt();
System.out.println("请输入天数");
int days=sc.nextInt();
Bus bus=new Bus(n);
double money=test.calePrice(bus, days);
System.out.println(n+"座客车"+money+"元租用"+days+"天");
}
}
}
作者:冲天支峰 20160529