主要内容
一:IDEA
二:包
1.引出
2.作用
3.语法
4.本质
5.入门
- 第一个使用默认导入的包
Dog dog1 = new Dog();
System.out.println(dog1);
com.xiaoqiang.Dog dog2 = new com.xiaoqiang.Dog();
System.out.println(dog2);
命名
常用包
注意
类进一步完善
三:访问修饰符
四:OOP三大特征
1.封装
- 案例
- 不能直接查看工资:getXxx()方法中设置给权限密码
//创建一个类
class People{
public String name;
private int age;
public People(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
if(name.length() >= 2 && name.length() <= 6){
this.name = name;
}else {
System.out.println("请输入的2-6个字符的名字");
//给个默认值
this.name = "无名人";
}
}
public int getAge() {
return age;
}
public void setAge(int age) {
if (age > 1 && age < 120) {
this.age = age;
}else {
System.out.println("年龄在1-120间");
}
}
}
封装与构造器
- 将构造器 与 类提供的 访问方法结合,进行数据校验
public People(String name, int age) {
this.name = name;
this.age = age;
}
public People(String name, int age) {
setName(name);
setAge(age);
}
- 练习
2.继承
Pupil pupil = new Pupil();
pupil.name = "小明";
pupil.exam();
pupil.setScore(100);
pupil.showInfo();
Graduate graduate = new Graduate();
graduate.name = "大明";
graduate.exam();
graduate.setScore(150);
graduate.showInfo();
class Student{
public String name;
private double score;
public Student(){
System.out.println("Student无参被调用。。。。。");
}
public void setScore(double score) {
this.score = score;
}
public void showInfo(){
System.out.println("学生:" + name + " 成绩:" + score);
}
}
class Pupil extends Student{
public void exam(){
System.out.println("小学生:" + name + "在考试");
}
}
class Graduate extends Student{
public void exam(){
System.out.println("大学生:" + name + "在考试");
}
}
一:示意图
二:细节
1.处理父类私有方法
- 换另外一种访问
child.getVar_private();
child.return_funp();
- Father类添加 公共访问方法
public int getVar_private() {
return var_private;
}
public void return_funp(){
fun_private();
}
2.构造器 关系:子类 父类
3.父类构造器 显式、默认调用
4.父类构造器 super()位置
5.super() 与 this()
6.Object 所有类的 超类
7.继承 追溯 到Object(构造器自顶向下 实现super())
8.单继承(直接继承)
9.什么时候 用继承
三:本质
- 方法一级一级找
- 构造器:从上往下
Son son = new Son();
System.out.println(son.name + son.age + son.hobby);
class GrandPa{
String name = "大头爷爷";
String hobby = "旅游";
public GrandPa(){
System.out.println("GrandPa构造方法");
}
}
class Father extends GrandPa{
String name = "大头爸爸";
int age = 39;
public Father(){
System.out.println("Father构造方法");
}
}
class Son extends Father{
public Son(){
System.out.println("son构造方法");
}
String name = "大头儿子";
}
- 练习
五:super
- 注意查找,
六:方法重写/覆盖(overwrite)
细节
1.返回类型
2.访问权限(修饰符)
重载–重写
- 练习(省略get / set方法)
Person jack = new Person("jack", 10);
System.out.println(jack.say());
Student smith = new Student("smith", 20, 123456, 99.8);
System.out.println(smith.say());
class Person{
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String say(){
return "name=" + name + " age=" + age;
}
}
class Student extends Person{
private int id;
private double score;
public Student(String name, int age, int id, double score) {
super(name, age);
this.id = id;
this.score = score;
}
public String say(){
return super.say() + " id= " + id + " score= " + score;
}
}
-
复用父类
-
完善应该添加一些逻辑
七:多态
1.引出
2.方法多态
3.对象多态
编译运行----运行类型
父类的引用 指向 子类对象
- 入门
4.细节
1.向上转型
2.向下转型
3.属性没有重写
4.instanceof 判断运行类型
-
练习
-
练习2
5.动态绑定机制
6.多态应用(结合动态绑定机制)
多态数组
多态参数
八:Object类
1.==
2.equals()
- Object源码
- 练习
- 注意基本数据类型
- 重写Person的equals()方法
@Override
public boolean equals(Object obj) {
if (this == obj){
return true;
}
if (obj instanceof Person){
Person p = (Person) obj;
return this.age == p.age && this.gender.equals(p.gender) && this.name.equals(p.name);
}
return false;
}
3.hashCode()
4.toString
- 直接输出对象,默认会调用toString()
5.finalize
Car car = new Car("BMW");
car = null;
//主动调用,看效果
System.gc();
System.out.println("程序退出。。。");
class Car{
private String name;
public Car(String name) {
this.name = name;
}
//销毁对象
@Override
protected void finalize() throws Throwable {
// super.finalize();
System.out.println("回收了对象");
System.out.println("释放一些资源。。。。");
}
}
九:断点调试