第三章第3节:面向对象进阶
封装 private
概述:
封装的意义在于保护或者防止代码(数据)被我们无意中破坏。
保护成员属性,不让类以外的程序直接访问或者修改;
封装原则:
隐藏对象的属性和实现细节,仅对外公开访问方法,并且控制访问级别。
this
在Java基础中,this关键字是一个重要的概念。使用this关键字可以完成以下的操作:
· 调用类中的属性
· 调用类中的方法或构造方法
- 在一个构造方法中,调用另一个构造方法时,调用的代码 必须编写在构造方法的第一行。
· 表示当前对象
eclipse自动生成setter,getter方法
shift + Alt + s -> Generate Getter And Setters -> 选择相应的属性
静态static
静态static:可以看作在方法区中单独存在的一个属性,每一个对象的创建不会影响它的属性。
static 静态属性,存储在方法区中
多行注释快捷键
Ctrl+Shift+C 或者 Ctrl+/ 会加上 // 注释,再重复按一下就会去掉 // 注释。
Ctrl+Shift+/会加上多行注释/** 注释内容 */
类先加载,对象再创建,
快捷导包
Ctrl + Shift + o
静态属性赋值:类名打点调用
/**
* 继承:
* 继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。
* 继承就是子类继承父类的特征(属性)和行为(方法),使得子类对象(实例)具有父类的实例域和方法,
* 或子类从父类继承方法,使得子类具有父类相同的行为。
* 格式:
* class 父类{
* }
*
* class 子类 extends 父类{
* }
* 继承的限制:
* Java中只有单继承,多重继承,没有多继承。
*
* super:
* 通过super,可以访问父类构造方法
* 调用super构造方法的代码,必须写在子类构造方法的第一行
* 通过super,可以访问父类的属性
* 通过super,可以访问父类的方法
*/
package Classroom;
/**
* 重写(override)规则:
* (作用在子类继承父类的某个方法时,方法不适用与子类的执行,就把该方法重写一遍)
* 1.参数列表必须完全与被重写方法的相同;
* 2.返回类型必须完全与被重写方法的返回类型相同;
* 3.访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类的一个方法被声明为public,那么在子类中重写该方法就不能声明为protected。
* 4.父类的成员方法只能被它的子类重写。
* 5.声明为static和privete的方法不能被重写,但是能够被再次声明。
*
*
*面试题:
* Java中重写(Override)与重载(Overload)的区别
* 1.发生的位置
* 重载:一个类中
* 重写:子父类中
* 2.参数列表限制
* 重载:必须不同的
* 重写:必须相同的
* 3.返回值类型
* 重载:与返回值类型无关
* 重写:返回值类型必须一致
* 4.访问权限
* 重载:与访问权限无关
* 重写:子的方法权限 必须不能小于 父的方法权限
* 5.异常处理
* 重载:与异常无关
* 重写:异常范文可以更小,但是不能抛出新的异常
*/
public class Demo3 {
public static void main(String[] args) {
Student3 s = new Student3();
s.say();
}
}
class Person3{
public void say() {
System.out.println("锄禾日当午,汗滴禾下土");
}
}
class Student3 extends Person3{
public void say() {
System.out.println("床前明月光,玻璃好上霜。要不及时擦,整不好的脏!");
}
}
执行结果:
动态扩容,讲解示意图:
随机数生成的方法:
package Test2;
import java.util.Random;
public class Demo1 {
public static void main(String[] args) {
Random random = new Random();
int code = random.nextInt(3)+1; //表示生成1-3的随机数
System.out.println(code);
}
}
重写equals
局部内部类:
提高代码复用率,面向对象编程。
package day01;
/**
* final 关键字
* final 用于修饰属性、变量
* 变量成为了常量,无法对其再次赋值
* final修饰的局部变量,只能赋值一次(可以先声明后赋值)
* final修饰的是成员属性,必须在声明时赋值
* 全局常量 (public static final)
*
* 常量的命名规范:
* 由1个或多个单词组成,单词于单词之间必须使用下划线隔开,单词中所有字母大写
* 例如:SQL_INSERT
*
* final 用于修饰类:
* final修饰的类,不可以被继承
* final 用于修饰方法
* final修饰的方法,不能被子类重写
*
* 全局常量 (public static final)
* @author ZXyuan
*
*/
public class Demo45 {
public static void main(String[] args) {
final int a = 10;
System.out.println(a);
}
}
装箱、拆箱操作: