黑马程序员技术交流社区
标题: java面向对象学习分享2 [打印本页]
作者: 周发建 时间: 2016-3-21 13:46
标题: java面向对象学习分享2
(一)继承提高代码的复用性
让类与类之间产生关系,为多态提供了前提
基类 ---- 导出类
this 本类对象的引用
super 代表父类空间
覆盖:保留父类方法的声明,增强方法的功能。
注意:覆盖父类方法的权限必须大于父类
子类初始化过程
/**
* 对象初始化过程
* Person p = new Person();
* 1. JVM读取指定路径下的Person.class文件,并加载进内存
* 加载的时候会一并加载Peron的父类(如果有直接父类的情况下)
* 2. 在堆内存中开辟空间,分配地址
* 3. 并在对象空间中,对对象的属性进行默认初始化
* 4. 调用对应的构造函数进行初始化
* 5. 在构造函数中,第一行会先调用父类中的构造函数进行初始化
* 6. 父类初始化完毕后,再对子类的属性进行显示初始化
* 7. 再进行子类构造函数的特定初始化
* 8. 初始化完毕后,将地址赋值给引用变量
*/
//父类
class Fu{
static{
System.out.println("1");
}
{
System.out.println("3");
}
Fu(){
System.out.println("4");
show(); //注意,这里调用的是子类的show(),在这个时候子类的num还没有显示初始化
}
public void show(){}
}
//子类
class Zi extends Fu{
int num = 520;
static{
System.out.println("2");
}
{
System.out.println("5");
}
Zi(){
//super(); 默认调用父类的无参构造函数
System.out.println("6");
}
public void show(){
System.out.println("zi的show"+num);
}
}
/*
注意:如果父类显示定义了非空参构造函数,那么子类的构造函数中就需要显示的指定父类对应的构造函数
*/
final 最终的
修饰类、方法、变量
修饰的类不能被继承、修饰的方法不能被覆盖,修饰的变量是常量
abstract,抽象
不能具体描述的方法,可以定义为抽象的方法【抽象的方法没有方法体】
含有抽象方法的类是抽象类
抽象类不能被实例化(因为抽象类是没有具体描述的,需要进一步具体描述)
抽象关键字不能与【private、final、static】共存
//雇员
abstract class Employee{
private String id; //id
private String name; //姓名
private double pay; //薪水
public Employee(String name, double pay) {
this.name = name;
this.pay = pay;
}
//雇员的工作内容不具体,所以定义为抽象的
public abstract void work();
}
//项目经理
class Manager extends Employee{
private int bonus; //奖金
public Manager(String name, double pay,int bonus) {
super(name, pay);
this.bonus = bonus;
}
@Override
public void work() {
System.out.println("管理项目");
}
}
interface 接口
接口是更加抽象的抽象类
变量: public static final..
方法: public ..
接口暴露规则、提高扩展、降低耦合
注意:对外暴露规则的功能都可以称之为接口
继承是关系、接口是功能
abstract class 犬{
abstract void 吼叫();
}
interface 导盲{
void 导盲();
}
class 导盲犬 extends 犬 implements 导盲{
@Override
public void 导盲() {
System.out.println("导盲");
}
@Override
void 吼叫() {
System.out.println("汪汪叫");
}
}
| 欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |