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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 肆月 初级黑马   /  2018-5-30 12:43  /  836 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

面向对象三大特性:封装、继承、多态


1.面向对象的特征二:
    继承性:一个类可以使用别的类的成员属性和方法,这就是继承关系

        A: 为什么要设计继承性:为了多个类的共有部分一体化为父类,直接调用,更方便修改

        B:通过“class A extends B”类实现类的继承。
                子类:A         父类(或基类 SuperClass):B       
                **(对于父类的私有成员属性,子类获取到了,但是没有权限直接调用)**

        C:子类继承父类以后,父类中声明的属性、方法,子类就可以获取到。
                明确:当父类中有私有的(private)属性或方法时,子类同样可以获取到,只是由于封装性的设计,使得子类不可以直接调用。
               
                     继承的好处:子类除了通过继承,获取父类的属性和方法之外,还可以定义自己的特有的属性和方法。
       

        关键字extends:子类是对父类功能的“扩展”,但是!!!子类不是父类的子集
                **:但是!不能为了获取某个类的功能就随意继承某个类,必须有is a的关系才可以继承

        D:java中继承的特点:java中类的继承性只支持单继承:只能继承一个父类,但是父类可以有多个子类
       
        E:子类和父类是相对的概念:
                子类1也可以被子类2作为父类被继承:子类2同时拥有子类1和父类的属性、方法。

        继承的优点:
                A:提高了代码的安全性
                B:提高了代码的可维护性
        继承的缺点:
                A:类的耦合性增强了
                B:开发的原则:高内聚低耦合
                        内聚:就是自己完成某件事的能力
                        耦合:类与类的关系       

2.方法的重写(override)或覆写(overwrite)
        A:使用环境:有子类继承父类
        B:子类继承父类以后,若父类的方法对子类不适用,那么子类可以对父类的方法重写、覆盖、覆写
        C:重写的规则:
                a:要求子类方法的 “返回值类型 方法名(参数列表)”与父类的方法一样
                b:子类方法的修饰符不能小于父类方法的修饰符(public > default(默认,一般不写) > protected > private)
                        **:如果父类的一个方法定义成private,子类则不可以重写!因为private只能当前类(父类)使用,子类中的方法相当于重新定义的一个
               
                c:**若父类方法抛异常,那么子类方法抛的异常类型不能大于父类的
                d:**子父类的方法必须同为static或同为非static
                        若方法同为static,那么对象是父类(子类)类型就会执行父类(子类)的方法
                        若方法同为非static,那么对象是父类(子类)的实例对象就会执行父类(子类)的方法
                       

3.访问权限修饰符
        修饰符                类内部                同一个包                子类                任何地方
        private                yes
        default                yes                yes
        protected        yes                yes                        yes
        public                yes                yes                        yes                yes

    对于class的权限修饰只可以使用public和default,类中成员属性可以用protected和private
        *:public类可以在任意地方被访问
        *:default类只可以被同一个包内部的类访问

4.super关键字:
        A:在Java类中使用super来调用父类中的制定操作:
                super可用于访问父类中定义的属性
                super可用于调用父类中定义的成员方法
                super可用于在子类构造方法中调用父类的构造器
       
        B:当子父类出现同名成员时,调用时可以用super进行区分
                super.属性名(表示父类的)
                this.属性名(表示当前类(子类)的)
               
                a:super的追溯不仅限于直接父类
                b:super和this的用法相似,this代表本来对象的引用,super代表父类的内存空间的标识
       
        C:当子类重写父类的方法后,在子类中若想再显式(作为代码编写出来)的调用父类被重写的方法,就需要用“super.方法名”

        D:super修饰构造器:
                a:通过在子类中使用“super(形参列表)”来显式的调用父类中指定的构造器
                        *:在构造器内部,“super(形参列表)”必须要在首行!
                        *:在构造器内部,“this(形参列表)”或“super(形参列表)”只能出现一个
                        *:当构造器中,不显式(不作为代码编写出来)的调用“this(形参列表)”或“super(形参列表)”,则默认调用的父类中空参的构造器

5.子类对象实例化全过程:
        /*
         * 子类实例化全过程
         */
        class Creature{        //第六个执行,这个上面还有一个系统默认的Object父类
                public Creature(){        //第五个执行
                        System.out.println("Creature无参数的构造器");        //第一个显示
                }
        }
        class Animal extends Creature{                       
                public Animal(String name){                //第四个执行
                        System.out.println("Animal带一个参数的构造器,该动物的name为"+name);        //第二个显示
                }
                public Animal(String name, int age){                //第三个执行
                        this(name);
                        System.out.println("Animal带两个参数的构造器,其age为"+age);        //第三个显示
                }
        }
        public class Wolf extends Animal{
                public Wolf(){                //第二个执行
                        super("灰太狼", 3);
                        System.out.println("Wolf无参数的构造器");        //第四个显示
                }
                public static void main(String[] args) {
                        new Wolf();        //第一个执行
                }
        }

6.匿名对象:没有名字的对象,没有引用变量的对象
        格式:new 构造方法;                //new Student();

        应用场景:当方法只调用一次的时候就可以使用匿名对象调用方法
                可以当做参数进行传递,但是无法在传参之前做其他事情

        注意:匿名对象可以调用成员变量并赋值,但是赋值并没有意义

7.final修饰符:可以修饰类,成员方法和成员变量
        final修饰的类:不能被继承,不能有子类
        final修饰的方法:不能被重写
        final修饰的变量:不可以修改的,是常量(自定义常量)

        *:自定义常量“必须”初始化,可以在定义时初始化或赋值初始化
                自定义常量命名规则:变量名全部大写,若有多个单词并用下划线“_”链接

0 个回复

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