继承
- 重写的方法类型可以是父类方法类型的子类型
如父类方法Object get(),子类是Integer get()也属于方法重写
- 访问权限修饰符从高到低:public protected 友好的 private
- 子类重写父类方法时,不允许降低访问权限,可以提高
关于super
public class TextSuper {
public static void main(String[] args) {
Aver aver = new Aver();
aver.n = 100;
float r1 = aver.f();
float r2 = aver.g();
System.out.println("r1 = "+r1);//输出结果为50.5,super.n = 100
System.out.println("r2 = "+r2);//输出结果为2525.0,在调用g()方法时父类的n已经改变
/*
float r2 = aver.g();先调用g()时,父类的n为默认值0,所以输出0.0
float r1 = aver.f();
*/
}
}
class Sum{
int n;
float f(){
float sum = 0;
for (int i = 0; i <= n; i++) {
sum +=i;
}
return sum;
}
}
class Aver extends Sum{
int n;
@Override
float f() {
float c;
super.n = n;
c=super.f();
return c/n;
}
float g(){
float c;
c=super.f();
return c/2;
}
}
对象的上转型对象
- 当子类创建一个对象时,把这个对象的=引用放到放到父类的对象中
如:Animal a;
Tiger b = new Tiger();
a = b;
abstract类和abstract方法
- 抽象方法只有声明,没有实现
- 抽象类不能new,可以new它的子类,继承抽象类的非抽象类必须重写父类的方法
- final和abstract不能同时修饰类和方法,final修饰的类不能有子类,修饰的方法不能重写,而抽象类的子类必须重写父类的方法
- 不能用static修饰抽象方法
面向抽象编程是为了应对用户需求的变化,将某各类中因需求变化而改动的代码从该类中分离出去,交给子类实现
开闭原则:对扩展开放,对修改关闭
abstract public class SIM {//抽象一个卡,卡需要设置卡号,要有所属公司,能获取卡号
public abstract void setNumber(String n);
public abstract String giveNumber();
public abstract String giveCorpName();
}
public class SIMOfChinaMobile extends SIM{//卡的类型一
String number;
@Override
public void setNumber(String n) {
number = n;
}
@Override
public String giveNumber() {
return number;
}
@Override
public String giveCorpName() {
return "中国移动";
}
}
public class SIMOfChinaUnicom extends SIM{
String number;
@Override
public void setNumber(String n) {
number = n;
}
@Override
public String giveNumber() {
return number;
}
@Override
public String giveCorpName() {
return "中国联通";
}
}
public class MobileTelephone {
SIM card;//用有另一个类作对象的对象
void useSIM(SIM card){
this.card = card;
}
void show(){
System.out.println("使用的卡是:"+card.giveCorpName());
System.out.println("手机号码是:"+card.giveNumber());
}
}
public class Application {
public static void main(String[] args) {
MobileTelephone mobileTelephone = new MobileTelephone();
SIM sim = new SIMOfChinaMobile();//sim为上转型对象,所以可以访问他的子类的方法
sim.setNumber("15288888888");
mobileTelephone.useSIM(sim);
mobileTelephone.show();
}
}