黑马程序员技术交流社区

标题: JAVA基础精华(面向对象) [打印本页]

作者: 游小星    时间: 2015-11-18 22:11
标题: JAVA基础精华(面向对象)

05.18_面向对象(方法的形式参数是类名的时候如何调用)(掌握)
* A:方法的参数是类名public void print(Student s){}//print(new Student());
        * 如果你看到了一个方法的形式参数是一个类类型(引用类型),这里其实需要的是该类的对象。
案例:
class Demo1_Student {
        public static void main(String[] args) {
                print(10);
                Student s = new Student();                                        //创建对象,并将对象的地址值赋值给s
                print(s);
        }
        public static void print(int x) {                                //基本数据类型当作形式参数
                System.out.println(x);
        }
        public static void print(Student stu) {                        //引用数据类型当作形式参数
                stu.name = "张三";
                stu.age = 23;
                stu.speak();
        }
}
/*
* A:方法的参数是类名public void print(Student s){}//print(new Student());
        * 如果你看到了一个方法的形式参数是一个类类型(引用类型),这里其实需要的是该类的对象。
*/
class Student {
        String name;                                        //姓名
        int age;                                                //年龄
        public void speak() {
                System.out.println(name + "..." + age);
        }
}





* A:什么是匿名对象
        * 没有名字的对象
* B:匿名对象应用场景
        * a:调用方法,仅仅只调用一次的时候。
                * 那么,这种匿名调用有什么好处吗?
                        * 节省代码
                * 注意:调用多次的时候,不适合。匿名对象调用完毕就是垃圾。可以被垃圾回收器回收。
        * b:匿名对象可以作为实际参数传递

* A:封装概述
        * 是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。

* B:封装好处
        * 隐藏实现细节,提供公共的访问方式
        * 提高了代码的复用性
        * 提高安全性。
* C:封装原则
        * 将不需要对外提供的内容都隐藏起来。
        * 把属性隐藏,提供公共方法对其访问。
B:private关键字特点
        * a:是一个权限修饰符
        * b:可以修饰成员变量和成员方法
        * c:被其修饰的成员只能在本类中被访问
###07.01_面向对象(代码块的概述和分类)(了解)(面试的时候会问,开发不用或者很少用)
* A:代码块概述
        * 在Java中,使用{}括起来的代码被称为代码块。
* B:代码块分类
        * 根据其位置和声明的不同,可以分为局部代码块,构造代码块,静态代码块,同步代码块(多线程讲解)。
        局部代码块:只要是和局部有关系的,都是和方法有关系的
        局部变量:在方法声明上或者在方法内部
* C:常见代码块的应用
        * a:局部代码块
                * 在方法中出现;限定变量生命周期,及早释放,提高内存利用率
        * b:构造代码块 (初始化块)
                * 在类中方法外出现;多个构造方法方法中相同的代码存放到一起,每次调用构造都执行,并且在构造方法前执行
        * c:静态代码块
                * 在类中方法外出现,并加上static修饰;用于给类进行初始化,在加载的时候就执行,并且只执行一次。
                * 一般用于加载驱动


* A:this和super都代表什么
        * this:代表当前对象的引用,谁来调用我,我就代表谁
        * super:代表当前对象父类的引用
* B:this和super的使用区别
        * a:调用成员变量
                * this.成员变量 调用本类的成员变量,也可以调用父类的成员变量
                * super.成员变量 调用父类的成员变量
        * b:调用构造方法
                * this(...)        调用本类的构造方法
                * super(...)        调用父类的构造方法
        * c:调用成员方法
                * this.成员方法 调用本类的成员方法,也可

A:案例演示
        * 父类没有无参构造方法,子类怎么办?
        * super解决:用super(....)显式调用父类的有参构造,如:super(name,age);->super("zs",30);
        * this解决:通过this调用本类的有参构造,然后在本类的有参构造里,又调用了父类的有参构造,相当于间接调用父类的有参构造.
* B:注意事项
        * super(…)或者this(….)必须出现在构造方法的第一条语句上,只能出现其一

* A:方法重写注意事项
        * a:父类中私有方法不能被重写
                * 因为父类私有方法子类根本就无法继承,既然子类无法继承,就谈不上重写了
        * b:子类重写父类方法时,访问权限不能更低
                * 最好就一致
        * c:父类静态方法,子类也必须通过静态方法进行重写
                * 其实这个算不上方法重写,但是现象确实如此,至于为什么算不上方法重写,多态中我会讲解(静态只能覆盖静态)
               
        * 子类重写父类方法的时候,最好声明一模一样。

A:final概述
* B:final修饰特点
        * 修饰类,类不能被继承
        * 修饰变量,变量就变成了常量,只能被赋值一次
        * 修饰方法,方法不能被重写(有时所有方法都很重要,都不需要被重写,需要将类定义成final的)
        * 基本类型,是值不能被改变
        * 引用类型,是地址值不能被改变,对象中的属性可以改变
* A:多态(polymorphic [,p?l?'m??f?k])概述
        * 事物存在的多种形态
* B:多态前提
        * a:要有继承关系。
        * b:要有方法重写。
        * c:要有父类引用指向子类对象。


* 成员变量
        * 编译看左边(父类),运行看左边(父类)。
/*
成员变量
编译看左边(父类),运行看左边(父类)
成员方法
编译看左边(父类),运行看右边(子类)。动态绑定
静态方法
编译看左边(父类),运行看左边(父类)。
(静态和类相关,算不上重写,所以,访问还是左边的)
只有非静态的成员方法,编译看左边,运行看右边


A:多态的好处
        * a:提高了代码的维护性(继承保证)
        * b:提高了代码的扩展性(由多态保证)
* C:多态的弊端
        * 不能使用子类的特有属性和行为。
A:抽象类概述
        * 抽象就是看不懂的
* B:抽象类特点
        * a:抽象类和抽象方法必须用abstract关键字修饰
                * abstract class 类名 {}
                * public abstract void eat();//当不知道该方法具体是怎么实现的
                //比如动物吃,你知道它吃什么吗?怎么吃?都不知道
        * b:抽象类不一定有抽象方法,有抽象方法的类一定是抽象类或者是接口
        * c:抽象类不能实例化那么,抽象类如何实例化呢?
                * 按照多态的方式,由具体的子类实例化。其实这也是多态的一种,抽象类多态。
        * d:抽象类的子类
                * 要么是抽象类
                * 要么重写抽象类中的所有抽象方法
A:抽象类的成员特点
        * a:成员变量:既可以是变量,也可以是常量。abstract是否可以修饰成员变量?不能修饰成员变量
        * b:构造方法:有。
                * 用于子类访问父类数据的初始化。
        * c:成员方法:既可以是抽象的,也可以是非抽象的。
* B:案例演示
        * 抽象类的成员特点
* C:抽象类的成员方法特性:
        * a:抽象方法 强制要求子类做的事情。
        * b:非抽象方法 子类继承的事情,提高代码复用性。
* A:接口成员特点
        * 成员变量只能是常量,并且是静态的并公共的。
                        * 默认修饰符:public static final
                        * 建议:自己手动给出。
        * 构造方法:接口没有构造方法。
        * 成员方法:只能是抽象方法。
                        * 默认修饰符:public abstract
                        * 建议:自己手动给出。
#08.19_面向对象(抽象类和接口的区别)
* A:成员区别
        * 抽象类:
                * 成员变量:可以变量,也可以常量
                * 构造方法:有
                * 成员方法:可以抽象,也可以非抽象
        * 接口:
                * 成员变量:只可以常量
                * 成员方法:只可以抽象       
* B:关系区别
        * 类与类
                * 继承,单继承
        * 类与接口
                * 实现,单实现,多实现
        * 接口与接口
                * 继承,单继承,多继承
               
* C:设计理念区别
        * 抽象类 被继承体现的是:”is a”的关系。抽象类中定义的是该继承体系的共性功能。
        * 接口 被实现体现的是:”like a”的关系。接口中定义的是该继承体系的扩展功能。
        * 对事物本质的抽象用抽象类,对事物功能的扩展用接口

* A:定义包的格式
        * package 包名;
        * 多级包用.分开即可
* B:定义包的注意事项
        * A:package语句必须是程序的第一条可执行的代码
        * B:package语句在一个java文件中只能有一个
        * C:如果没有package,默认表示无包名

                                        本类         同一个包下(子类和无关类)        不同包下(子类)              不同包下(无关类)
                private                 Y               
                默认                        Y                Y
                protected        Y                Y                                                        Y
                public                Y                Y                                                        Y                                Y



* B:成员内部类被静态修饰后的访问方式是:
        * 外部类名.内部类名 对象名 = 外部类名.内部类对象;
* 局部内部类访问局部变量必须用final修饰
        * 局部内部类在访问他所在方法中的局部变量必须用final修饰,为什么?
                因为当调用这个方法时,局部变量如果没有用final修饰,他的生命周期和方法的生命周期是一样的,当方法弹栈,这个局部变量也会消失,那么如果局部内部类对象还没有马上消失想用这个局部变量,就没有了,如果用final修饰会在类加载的时候进入常量池,即使方法弹栈,常量池的常量还在,也可以继续使用




作者: 唯我独赞mo    时间: 2015-11-18 22:35
不错,顶一个
作者: 袁有福123    时间: 2015-11-18 22:37
写的很好  值得推荐学习!看完能帮助到我  顿时茅塞顿开 很棒  !!
作者: 小鹿    时间: 2015-11-19 08:53
八错八错!
作者: ln0491    时间: 2015-11-19 08:55
不错,学习了。。。。
作者: 刘旭波    时间: 2015-11-19 20:12
学习了,真的总结的很好
作者: 切比雪夫    时间: 2015-11-19 21:35
支持一下!!
作者: 游小星    时间: 2015-11-19 22:44
唯我独赞mo 发表于 2015-11-18 22:35
不错,顶一个

亲,送点黑马币吧!马上点招了,剩下的马上更!谢谢拉!
作者: 游小星    时间: 2015-11-19 22:45
袁有福123 发表于 2015-11-18 22:37
写的很好  值得推荐学习!看完能帮助到我  顿时茅塞顿开 很棒  !!

亲,送点黑马币吧!马上点招了,剩下的马上更!谢谢拉!
作者: yubail    时间: 2015-11-19 22:57
支持一下
作者: cuiyaqian    时间: 2015-11-19 23:05
赞赞赞.........
作者: xuran39847    时间: 2015-11-19 23:14
写的好,值得学习!
作者: taitoukankan    时间: 2015-11-19 23:19
值得好好学习!
作者: jlq    时间: 2015-11-19 23:47
bucuo zhichiyixia




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2