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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© light23 初级黑马   /  2019-6-6 09:58  /  876 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


1.接口
        什么是接口?
                比抽象类更加抽象的表现形式的就是接口

        接口的定义格式?
                interface 接口名 {}

                interface AAA {}

        接口的使用格式?
                interface AAA {}

                class BBB implements AAA {

                }

                public Demo {
                        public static void main(String[] args) {
                                BBB b = new BBB();
                        }
                }
                        接口并没有继承Object类

        类与类的关系,接口与接口的关系,类与接口的关系?
                类与类的关系?
                        继承关系,只支持单继承,不可以多继承,可以多层继承,不可以循环继承

                接口与接口的关系?
                        继承关系,可以单继承,也可以多继承

                类与接口的关系?
                        实现关系,一个类可以实现一个接口,也可以实现多个接口,也可以在继承一个类的同时实现多个接口

        接口和抽象类的区别?
                从设计角度来考虑它们的区别

                什么时候使用抽象类?
                        当两个类之间存在"is a"的关系的时候,
                        只不过这个类里面有了抽象方法,所以该普通类变成了抽象类       
       
                什么时候使用接口?
                        接口是额外扩展的功能,也就是说该类本身不具备某个功能,但是呢如果想要这个功能,你就可以去实现具备该功能的接口

2.final关键字
        什么是final关键字?
                它是一个修饰符,代表最终的意思,可以修饰类,变量,方法

        final关键字特点?
                被final修饰的类不可以被继承
                被final修饰的方法不可以被重写
                被final修饰的变量变成了常量,就是自定义常量

3.多态
        什么是多态呢?
                对象在不同的时刻,表现出来的不同的状态

        多态的好处和弊端?
                好处:提高了扩展性
                        在开发中,一般都是父类类行为形式参数,子类对象作\为实际参数

                弊端:有局限性,使用了多态,父类引用不能使用子类特有的东西

        多态的前提条件?
                要有继承或者实现的关系
                要有父类引用(父接口引用)指向子类对象
                要有方法的重写(即使没有方法的重写也可以构成多态,只不过没有方法重写的多态没有意义)

        多态的代码体现?
                class Fu {
                        public void print() {
                                System.out.println("fu");
                        }
                }

                class Zi extends Fu {//产生了继承的关系
                        public void print() {//方法的重写
                                System.out.println("zi");
                        }
                }

                class Demo {
                        public static void main(String[] args) {
                                Fu fu = new Zi();//父类引用指向子类对象
                        }
                }
               
        多态中子父类之间成员变量的关系?
                假设:父类中有一个成员变量,子类中有一个成员变量

                如果这两个变量的名字不相同的话:
                        class Fu {
                                int i = 1;
                        }

                        class Zi extends Fu {
                                int j = 2;
                        }

                        class Demo {
                                public static void main(String[] args) {
                                        Fu aaa = new Zi();
                                        System.out.println(aaa.i);//1
                                        System.out.println(aaa.j);//编译报错
                                }
                        }
               
                如果这两个变量的名字相同的话:
                        class Fu {
                                int i = 1;
                        }

                        class Zi extends Fu {
                                int i = 2;
                        }

                        class Demo {
                                public static void main(String[] args) {
                                        Fu aaa = new Zi();
                                        System.out.println(aaa.i);//1
                                        System.out.println(aaa.i);//1
                                }
                        }

                总结:总以上两个案例的结果来分析,父类引用不能使用子类中特有的成员变量,只能使用父类中带的
                记住口诀:针对成员变量来说,编译看左边,运行看左边

        多态中子父类之间成员方法的关系?
                假设:父类中有一个成员方法,子类中有一个成员方法

                如果这两个方法名字不相同的话:
                        class Fu {
                                public void printFu() {
                                        System.out.println("fu");
                                }
                        }

                        class Zi extends Fu {
                                public void printZi() {
                                        System.out.println("zi");
                                }
                        }

                        class Demo {
                                public static void main(String[] args) {
                                        Fu aaa = new Zi();
                                        aaa.printFu();//fu
                                        aaa.printZi();//编译报错
                                }
                        }

                如果这两个方法名字相同的话:
                        class Fu {
                                public void print() {
                                        System.out.println("fu");
                                }
                        }

                        class Zi extends Fu {
                                public void print() {
                                        System.out.println("zi");
                                }
                        }

                        class Demo {
                                public static void main(String[] args) {
                                        Fu aaa = new Zi();
                                        aaa.print();//zi
                                        aaa.print();//zi
                                }
                        }

                总结:总以上两个案例的结果来分析,父类引用不能使用子类中特有的成员方法,只能使用父类中带的
                记住口诀:针对成员方法来说,编译看左边,运行看右边
               
                注:针对静态的方法来说,编译看左边,运行看左边

        向上向下转型?
                什么是向上转型?
                        就是多态格式,父类引用指向子类对象

                向下转型有什么好处?
                        解决了父类引用不能使用子类特有成员的问题

                向下转型的格式?
                        Fu fu = new Zi();//向上转型
                        Zi zi = (Zi)fu;//向下转型

                        注:转不好容易报错,ClassCastException 类型转换异常

                        instanceof关键字有什么作用?
                                判断左边的对象的数据类型是否是右边的数据类型
                                if(zi instanceof Zi)

目标:
写出定义接口的格式?
        interface aaa() {}

写出实现接口的格式?
        interface aaa() {}
        class bbb implements aaa {}


能够说出使用多态的前提条件?
        要有继承或者实现的关系
        要有父类引用(父接口引用)指向子类对象
        要有方法的重写

理解多态的向上转型?
        就是普通的多态格式
        Fu fu = new Zi()

理解多态的向下转型?
        Zi zi = (Zi)fu;

描述final修饰的类的特点?
        被final修饰的类不可以被继承

描述final修饰的方法的特点?
        被final修饰的方法不可以被重写

       

0 个回复

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