java面对对象中级

1.包

(一)包的命名规范在这里插入图片描述

(二)常用包

在这里插入图片描述

(三)导入包

在这里插入图片描述

(四)Package

一个类最多只有一个package语句,即一个类最多只有一个所属包,并且这个语句要放在整个类的最上边
在这里插入图片描述

2.访问修饰符

(1)4种访问修饰符
在这里插入图片描述
在这里插入图片描述

3.面向对象的三大特征:封装,继承,多态

(一)封装(encapsulation)

封装的作用是可以为变量初始化设置判断条件
例如:Account类用来为变量设置初始值并加判断条件,AccountTest类用来测试

//file:Account.java
package com.xylearn;

public class Account {
    String name;
    double extra;
    String password;
    //构造器
    public Account(String name, double extra, String password) {
        setName(name);
        setExtra(extra);
        setPassword(password);
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        if(name.length()==2||name.length()==3||name.length()==4){
            this.name = name;
        }else{
            System.out.println("Invalid name!");
            this.name = "无名氏";
        }

    }

    public double getExtra() {
        return extra;
    }

    public void setExtra(double extra) {
        if(extra>20){
            this.extra = extra;
        }else{
            System.out.println("Invalid extra!");
            this.extra = 0;
        }
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        int len=password.length();
        if(len==6){
            this.password = password;
        }else{
            System.out.println("Invalid password!");
            this.password = "xxxxxx";
        }
    }
    public void info(){
        System.out.println("Name: "+name);
        System.out.println("Extra: "+extra);
        System.out.println("Password: "+password);
    }
}
//file:AccountTest.java
package com.xylearn;

public class AccountTest {
    public static void main(String[] args) {
        Account myAccount=new Account("shaw",350.2,"1234567");
        myAccount.info();
    }
}

(二)继承(extend)

继承的主要作用是代码复用 ,子类继承父类的属性和方法
(1)

父类—基类—超类
子类—派生类

在这里插入图片描述

继承语法
class 子类 extend 父类(){}

(2)继承使用细节
细节一
在这里插入图片描述
这里“要通过父类提供公共的方法去访问”意思是指:
…需要在父类的方法中将其return,这样就能访问到私有属性;
…需要在父类的方法a()中调用私有方法b(),这样就能通过调用a()来实现调用父类私有方法;
细节二
在创建子类对象时,会先调用父类的无参构造器,再调用子类的无参构造器;
细节三
在这里插入图片描述
细节四
在这里插入图片描述
注意点:构造器的第一行,在没有this()的情况下,都会默认有一个super()方法,会去找父类的无参构造器;若有this(),则一定没有super();
因为this()和super()都必须默认在构造器的第一行

细节五
在这里插入图片描述
细节六
(1)java是单继承制,子类最多只能继承一个父类,如果想让A同时继承B类和C类,可以让A继承B,然后B继承C,这样A就能间接继承C了;

(三)继承的内存布局

son—>father—>grandpa,当new son()时,内存中的变化情况:
在这里插入图片描述

(四)super()方法的注意事项

在这里插入图片描述
即父类(广义)中有同名属性。会按照:爸爸—>爷爷—>太爷爷的顺序去找;

(五)super()和this()的区别

在这里插入图片描述
易错题:super()方法和this()构造器只能放在方法的第一行,所以第一行有this()时,就默认没有super()了
在这里插入图片描述

(六)方法重写

在这里插入图片描述

(七)方法重载和重写的区别

在这里插入图片描述

(八)多态

(1)对象多态是多态的核心在这里插入图片描述
举个例子:在这里插入图片描述
(2)多态细节
向上转型:
在这里插入图片描述在这里插入图片描述
向下转型

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

向上/下转型的案例:

**Person类:父类

public class Test {
    public static void main(String[] args) {
        //向上转型
        Person person=new Student();
        person.run();//方法按照运行类型找,运行类型没有才会去父类找
        person.eat();
        //向下转型:向下转型的前提是内存中的对象必须真的为子类型
        Student student=(Student)person;
        student.study();
    }
}

**Student类:子类

public class Student extends Person {
    public void study(){
        System.out.println("Student is studying");
    }
    public void run(){
        System.out.println("Student is running");
    }
}

**Test类:测试类

public class Test {
    public static void main(String[] args) {
        //向上转型
        Person person=new Student();
        person.run();//方法按照运行类型找,运行类型没有才会去父类找---Student is running
        person.eat();---Person is eating
        //向下转型:向下转型的前提是内存中的对象必须真的为子类型
        Student student=(Student)person;
        student.study();---Student is studying
    }
}

(3)属性的重写

Animal animal=new Dog();
System.out.println(animal.name);这里的name去Animal类里面找-编译类型
animal.eat();这里的eat()方法去Dog类里找-运行类型
属性的重写要看类的编译类型(等号左侧),方法的重写看类的运行类型(等号右侧)
在这里插入图片描述
在这里插入图片描述

(九)java的动态绑定机制

在这里插入图片描述

4.object类

(一)equal()方法

在这里插入图片描述
Object对象的equal()方法是用来比较引用类型,即判断两对象的地址是否相同;String和Integer这些类重写父类Object的equal()方法,使得equal()方法可以比较值而不是引用;

(二)hashCode()方法

在这里插入图片描述

(三)toString()方法

可以“alt+insert”去重写toString()方法
在这里插入图片描述
在这里插入图片描述

(四)finalize()方法

在这里插入图片描述
Object的默认处理不会做任何释放资源的操作;

5.debug技巧

(1)shift+F7:逐行执行代码,alt+shift+F7可以强制进入封装好的系统给的方法中;
(2)shift+F8是跳出当前方法,继续执行;
(3)shift+F9是直接跳到下一个断点;
(4)可以在debug的过程中动态下断点;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值