A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© 周发建 中级黑马   /  2016-3-21 13:46  /  349 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

(一)继承
提高代码的复用性
让类与类之间产生关系,为多态提供了前提
基类 ---- 导出类
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("zishow"+num);
        }
}
/*
注意:如果父类显示定义了非空参构造函数,那么子类的构造函数中就需要显示的指定父类对应的构造函数
*/
final        最终的
修饰类、方法、变量
修饰的类不能被继承、修饰的方法不能被覆盖,修饰的变量是常量
abstract,抽象
不能具体描述的方法,可以定义为抽象的方法【抽象的方法没有方法体】
含有抽象方法的类是抽象类
抽象类不能被实例化(因为抽象类是没有具体描述的,需要进一步具体描述)
抽象关键字不能与【privatefinalstatic】共存
//雇员
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("汪汪叫");
        }
}

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马