java基础再回顾2

(四)子类与继承

1.Object类:所有类都继承自Object类,“Class A”原型是“Calss A extends Object”。

2.继承:

当子类与父类不在同一个包中,子类只继承父类中protected和public访问权限的成员变量与方法
子类继承的方法只能操作子类继承和隐藏的成员变量。子类新定义的方法可以操作子类继承和子类新声明的成员变量,但无法直接操作子类隐藏的成员变量(要使用super)
子类不继承父类的构造方法,因此子类在其构造方法中要使用super调用父类的构造方法。
当类中定义了一个或多个构造方法时,java不提供默认构造方法。因此父类中定义多个构造方法时,必须包括一个不带参数的构造方法。
(五)面向抽象编程

1.对象的向上转型:上转型对象不能操作子类新增的成员变量与方法

父类 f=new 子类();
2.Open-Closed Principle:系统应当对扩展开放,对修改关闭。(怎么办?面向抽象和接口啊!)

3.面向抽象编程:设计类时,不该让类面向具体的类,而是面向抽象类。

例子:

设计抽象类SIM,以便扩展具体的运营商

public abstract class SIM {

protected String number;
protected String type;
public abstract void setNumber(String number);
public abstract void setType();
public void show(){
System.out.println(“类型:”+type+”号码”+number);
}
设计手机类,重点是在手机类中添加SIM抽象类,等待子类具体实现。
public class MobliePhone {private SIM sim;public void setSIM(SIM sim){ this.sim=sim;
}public void showMessage(){
sim.show();
}
实现两种类型的SIM卡,设为移动和联通。(Type类型可以在构造函数中实现)
public class yidong extends SIM{
@Override public void setNumber(String number) { this.number=number;
}
@Override public void setType() { this.type=”联通”;
}
主函数如下,若需要扩展SIM卡,只要继承SIM抽象类即可。如此设计即符合Java开闭原则。
public static void main(String[] args) {
MobliePhone mp=new MobliePhone();
SIM sim=new yidong();
sim.setNumber(“123456789”);
sim.setType();
mp.setSIM(sim);
mp.showMessage();
sim=new liantong();
sim.setNumber(“987654321”);
sim.setType();
mp.setSIM(sim);
mp.showMessage();
}

(六)面向接口编程

1.接口:

接口中只有抽象方法和常量,抽象方法一定是public,常量一定是public static,你看不到是因为系统隐藏了。
类实现接口,若没有重写接口中的全部方法,这个类就是一个抽象类。
接口要求一些类具有相同名称的方法,但不强迫这些类具有相同的父类。
接口无法调用类中非接口方法。
(很关键)如果一个方法的参数是接口类型,就可以将实现该接口的类的实例的引用传递给该接口参数,这个接口参数就可以回调类实现的接口方法。
2.面向接口编程:核心思想是接口回调,与面向抽象编程有一定的相似性。

例子:

设计一个广告的接口。

public interface Advertisement {
void showMess();void showCompany();
}
设计Televison类用于播放广告,重点是设置接口的参数回调。
public class Televison {
Advertisement adv;public void setAdv(Advertisement adv){ this.adv=adv;
}public void advertise(){
adv.showCompany();
adv.showMess();
}
实现具体的广告类
public class naobaijin implements Advertisement{
@Override public void showMess() {
System.out.println(“收礼只收脑白金”);
}
@Override public void showCompany() {
System.out.println(“白金集团”);
}
主函数如下,若需要扩展广告,只要实现Advertisement接口即可。如此设计即符合Java开闭原则。
main(String[] args) {
Televison tv
**学习Java的同学注意了!!!
学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入Java学习交流群,群号码:521352947 我们一起学Java!**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值