Review05 final_抽象与接口_包及访问控制权限

1、final
    final可以修饰变量、方法、类,等等;
        final修饰的局部变量一旦赋值,就不能再重新赋值了。(只能赋一次值。)
        final修饰的方法无法被覆盖/重写。
        final修饰的类无法被继承。
        final修饰的变量如果是一个引用怎么办?
            记住一句话:final修饰的变量只能赋一次值;(将内存地址视为值) 。
            如:final Person person2 = new Person(30);
                     person2 = new Person(50); //不行

                     person2.age = 50;
                     System.out.println(person2.age);//50
                     //这样就可以了,因为这样只是修改了上面对象的age部分,person2存储的内存地址没变
    final修饰的如果是实例变量呢?(注意:一般不用final修饰实例变量,不能变那就是常量了)
        结论:final修饰的实例变量,系统不会赋默认值,要求程序员必须手动赋值!
        这个赋值在变量后面赋值也行,在构造方法里面赋也行。
        class User {
            final int age = 20;//必须手动赋值!
        }
        实例变量什么时候赋值?
        构造方法执行时/new的时候。

     终极结论:
         static final联合修饰的变量称为“常量”;
         常量名建议全部大写,每个单词之间采用下划线_连接,如:
         static final String MY_COUNTRY= "中国";
2、抽象abstract(抽象类、抽象方法)
    注意:类到对象是实例化,对象到类是抽象。
    什么是抽象类?
         [修饰符列表] abstract class 类名{ }
        类和类之间具有共同特征,将这些共同特征提取出来,形成的就是抽象类。
        类本身是不存在的,所以抽象类无法创建对象(无法实例化)
        抽象类是无法实例化的,无法创建对象的,所以抽象类就是用来被子类继承的。
        抽象类虽然无法实例化,但是抽象类有构造方法,这个构造方法是供子类使用的。
        抽象类属于引用数据类型。
        抽象类的子类可以是抽象类。
        final和abstract不能联合使用,即不能用final修饰抽象类。
    什么是抽象方法?
        抽象方法表示没有实现的方法,没有方法体的方法,比如:
                public abstract void doSome();//注意,这里没有大括号。
                特点1:有abstract关键字;
                特点2:以分号结尾,没有方法体。
        抽象类中不一定有抽象方法,但是抽象方法必须出现在抽象类当中。
    重要结论:
        一个非抽象的类继承了抽象类,必须将抽象类中的抽象方法实现(覆盖,重写)。
3、接口
    接口的基础语法:
        1、接口也是一种“引用数据类型”,编译之后也是一个class字节码文件;
        2、接口是完全抽象的。(抽象类是半抽象),或者也可以说接口是特殊的抽象类;
        3、接口怎么定义?语法是什么?
            [修饰符列表] interface 接口名{}
        4、接口支持多继承;
        5、接口只包含两部分内容:一部分是常量,一部分是抽象方法。
        6、接口中所有的元素都是public修饰的。
        7、接口中的抽象方法定义时,public abstract修饰符可以省略;
        8、接口中定义常量时,public static final可以省略;
            interface M{
               int i = 100;//public static final可以省略
               int sum(int a,int b);//public abstract可以省略
            }
        9、接口中的方法都是抽象方法,所以不能有方法体;
        10、类和类之间叫做继承,类和接口之间叫做实现;
            别多想,你仍然可以将“实现”看作“继承”;
            继承使用关键字:extends
            实现使用关键字:implements
        11、当一个非抽象的类实现接口的话,必须将接口中所有的抽象方法全部实现。
        12、一个接口可以实现多个接口;
        13、类与类只支持单继承,一个类可以实现多个接口:
                需要实现所有接口方法;
                向下转型后只能调用各自原来就有的方法,如果想调用其他接口中的方法,可以采用接口转型。
                接口与接口之间没有继承关系可以进行向下转型,但是注意运行的时候可能会出现classcastexception异常。
                最好加instenceof进行判断;
                    X x = new A();
                    x.m1();
                    if (x instanceof Y ){
                        Y y2 = (Y)x;
                        y2.m2();
                    }//X:接口,Y:实现接口的类
        14、继承和接口同时出现的情况
                extends关键字在前,implements关键字在后;
        15、使用接口,写代码的时候可以使用多态(父类型的引用指向子类型的对象。)
4、面向抽象编程
    类型和类型之间的关系
        is a   继承关系:cat is an animal
        has a  关联关系,定义为属性:customer has a list
        like a 实现关系,类实现接口:cook like a list(映射),司机像导航之类的。

    总结:
        面向接口编程,可以降低程序的耦合度,提高程序的扩展力,符合OCP开发原则;
        接口的使用离不开多态机制(接口+多态才可以达到降低耦合度);
        接口可以解耦合,解开的是谁和谁的耦合?
            任何一个接口都有调用者和实现者。
            接口可以将调用者和实现者解耦合;
            调用者面向接口调用,实现者面向接口编写实现。(顾客,厨师,菜单的例子)
5、package、import及访问控制权限
    package打包
        为什么要使用package?
            package是Java中的包机制,包机制的作用是为了方便程序的管理;
            不同功能的类分别存放在不同的包下。(按照功能划分的,不同的软件包具有不同的功能)
        package怎么用?
            package是一个关键字,后面加包名,例如:
                package com.bjpowernode.javase.chapter17;
            注意:package语句只能出现在程序的第一行。
        包名的命名规范:
            公司域名倒叙 + 项目名 + 模块名 + 功能名
            类名变化:类名是:com.bjpowernode.javase.chapter17.HelloWorld;

     import导包
        import什么时候用?
            A类中使用B类,A类和B类在不同的包下,需要使用import;
                        java.lang.*;这个包下的类不需要使用import导入
        import怎么用?
            import 完整类名;
            import 包名.*;

    访问控制权限:
        private:私有的,只能在本类中访问;
        public:公开的,在任何位置都可以访问;
        “默认”:只能在本类,以及同包下访问;
        protected:受保护的,表示只能在同包、本类、子类中访问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值