黑马程序员——Java基础---面向对象代码块和继承和this和super和重写和重载和final
2016-06-05 23:00
671 查看
——Java培训、Android培训、iOS培训、UI培训、PHP培训、期待与您交流! ——
局部代码块
在方法中出现;限定变量生命周期,及早释放,提高内存利用率
构造代码块 (初始化块)
在类中方法外出现;多个构造方法方法中相同的代码存放到一起,每次调用构造都执行,并且在构造方法前执行
静态代码块
在类中方法外出现,并加上static修饰;用于给类进行初始化,在加载的时候就执行,并且只执行一次。
一般用于加载驱动
代码块的面试题
看程序写结果
提高了代码的维护性
让类与类之间产生了关系,是多态的前提
开发的原则:高内聚,低耦合。
耦合:类与类的关系
内聚:就是自己完成某件事情的能力
有些语言是支持多继承,格式:extends 类1,类2,…
Java支持多层继承(继承体系)
子类只能继承父类所有非私有的成员(成员方法和成员变量)
子类不能继承父类的构造方法,但是可以通过super(马上讲)关键字去访问父类构造方法。
不要为了部分功能而去继承,比如不能让经理继承程序员
什么时候使用继承
继承其实体现的是一种关系:”is a”。
super:代表当前对象父类的引用
this.成员变量 调用本类的成员变量,也可以调用父类的成员变量
super.成员变量 调用父类的成员变量
调用构造方法
this(…) 调用本类的构造方法
super(…) 调用父类的构造方法
调用成员方法
this.成员方法 调用本类的成员方法,也可以调用父类的方法
super.成员方法 调用父类的成员方法
因为子类会继承父类中的数据,可能还会使用父类的数据。所以,子类初始化之前,一定要先完成父类数据的初始化。
每一个构造方法的第一条语句默认都是:super() Object类最顶层的父类。
父类没有无参构造方法,子类可以用super或this解决。
继承中的面试题
子类重写父类方法时,访问权限不能更低,最好就一致。
父类静态方法,子类也必须通过静态方法进行重写,其实这个算不上方法重写,但是现象确实如此
子类重写父类方法的时候,最好声明一模一样。
面试题
方法重写的面试题
方法重写:子类中出现了和父类中方法声明一模一样的方法。与返回值类型有关,返回值是一致(或者是子父类)的
方法重载:本类中出现的方法名一样,参数列表不同的方法。与返回值类型无关。
子类对象调用方法的时候: 先找子类本身,再找父类。
修饰变量,变量就变成了常量,只能被赋值一次
修饰方法,方法不能被重写
引用类型,是地址值不能被改变,对象中的属性可以改变
在对象构造完毕前即可
——Java培训、Android培训、iOS培训、UI培训、PHP培训、期待与您交流! ——
一、代码块
在Java中,使用{}括起来的代码被称为代码块。根据其位置和声明的不同,可以分为局部代码块,构造代码块,静态代码块,同步代码块。局部代码块
在方法中出现;限定变量生命周期,及早释放,提高内存利用率
构造代码块 (初始化块)
在类中方法外出现;多个构造方法方法中相同的代码存放到一起,每次调用构造都执行,并且在构造方法前执行
静态代码块
在类中方法外出现,并加上static修饰;用于给类进行初始化,在加载的时候就执行,并且只执行一次。
一般用于加载驱动
代码块的面试题
看程序写结果
class Student { static { System.out.println("Student 静态代码块"); } { System.out.println("Student 构造代码块"); } public Student() { System.out.println("Student 构造方法"); } } class Demo2_Student { static { System.out.println("Demo2_Student静态代码块"); } public static void main(String[] args) { System.out.println("我是main方法"); Student s1 = new Student(); Student s2 = new Student(); } }
二、继承
让类与类之间产生关系,子父类关系。1.继承的好处
提高了代码的复用性提高了代码的维护性
让类与类之间产生了关系,是多态的前提
2.继承的弊端
类的耦合性增强了。开发的原则:高内聚,低耦合。
耦合:类与类的关系
内聚:就是自己完成某件事情的能力
3.继承的特点
Java只支持单继承,不支持多继承。(一个儿子只能有一个爹)有些语言是支持多继承,格式:extends 类1,类2,…
Java支持多层继承(继承体系)
4.继承的注意事项和什么时候使用继承
继承的注意事项子类只能继承父类所有非私有的成员(成员方法和成员变量)
子类不能继承父类的构造方法,但是可以通过super(马上讲)关键字去访问父类构造方法。
不要为了部分功能而去继承,比如不能让经理继承程序员
什么时候使用继承
继承其实体现的是一种关系:”is a”。
三、this和super
this:代表当前对象的引用,谁来调用我,我就代表谁super:代表当前对象父类的引用
1.this和super的使用区别
调用成员变量this.成员变量 调用本类的成员变量,也可以调用父类的成员变量
super.成员变量 调用父类的成员变量
调用构造方法
this(…) 调用本类的构造方法
super(…) 调用父类的构造方法
调用成员方法
this.成员方法 调用本类的成员方法,也可以调用父类的方法
super.成员方法 调用父类的成员方法
四、继承中构造方法的关系
子类中所有的构造方法默认都会访问父类中空参数的构造方法因为子类会继承父类中的数据,可能还会使用父类的数据。所以,子类初始化之前,一定要先完成父类数据的初始化。
每一个构造方法的第一条语句默认都是:super() Object类最顶层的父类。
父类没有无参构造方法,子类可以用super或this解决。
继承中的面试题
看程序写结果1 class Fu{ public int num = 10; public Fu(){ System.out.println("fu"); } } class Zi extends Fu{ public int num = 20; public Zi(){ System.out.println("zi"); } public void show(){ int num = 30; System.out.println(num); System.out.println(this.num); System.out.println(super.num); } } class Test1_Extends { public static void main(String[] args) { Zi z = new Zi(); z.show(); } } 看程序写结果2 class Fu { static { System.out.println("静态代码块Fu"); } { System.out.println("构造代码块Fu"); } public Fu() { System.out.println("构造方法Fu"); } } class Zi extends Fu { static { System.out.println("静态代码块Zi"); } { System.out.println("构造代码块Zi"); } public Zi() { System.out.println("构造方法Zi"); } } Zi z = new Zi(); 请执行结果。
五、重写和重载
重写:子父类出现了一模一样的方法(注意:返回值类型可以是子父类。1.注意事项
父类中私有方法不能被重写,因为父类私有方法子类根本就无法继承。子类重写父类方法时,访问权限不能更低,最好就一致。
父类静态方法,子类也必须通过静态方法进行重写,其实这个算不上方法重写,但是现象确实如此
子类重写父类方法的时候,最好声明一模一样。
面试题
方法重写的面试题
1.Override和Overload的区别?Overload能改变返回值类型吗?
overload可以改变返回值类型,只看参数列表方法重写:子类中出现了和父类中方法声明一模一样的方法。与返回值类型有关,返回值是一致(或者是子父类)的
方法重载:本类中出现的方法名一样,参数列表不同的方法。与返回值类型无关。
子类对象调用方法的时候: 先找子类本身,再找父类。
六、final
1.final修饰特点
修饰类,类不能被继承修饰变量,变量就变成了常量,只能被赋值一次
修饰方法,方法不能被重写
2.final修饰局部变量
基本类型,是值不能被改变引用类型,是地址值不能被改变,对象中的属性可以改变
3.final修饰变量的初始化时机
显示初始化public static final double PI = 3.14;
在对象构造完毕前即可
class GeekDS { final double PI; public GeekDS() { PI = 3.1415926; } }
——Java培训、Android培训、iOS培训、UI培训、PHP培训、期待与您交流! ——
相关文章推荐
- 面试题17:合并两个排序的链表
- Hibernate常见面试知识点
- JAVA程序员必看的15本书
- 软件工程师的职业规划
- 面试小问题
- 适合程序员的画图技法
- 适合程序员的画图技法
- 鸡汤君_一个老程序员的建议66
- 面试题——找单独数字
- 面试(一)
- 剑指Offer----面试题24:二叉搜索树的后序遍历序列
- Android面试题整理
- java面试笔试题整理
- Java笔试题库之编程题库 总共30道编程题,掌握了就可以应付中级以内Java面试题
- 剑指Offer----面试题23:从上往下打印二叉树(层序遍历)
- PHP面试总结
- 机器学习面试题总结
- 剑指Offer----面试题22:栈的压入、弹出序列
- Android面试题及其答案(二)
- java的面试题:缓冲池(-128~127)