Java基础----面向对象编程OOP之三

Java基础----面向对象编程OOP之三,第1张

Java基础----面向对象编程OOP之三 8.封装—OOP特征之一

封装 Encapsulation

该露的露、该藏的藏:程序设计追求“高内聚、低耦合”

高内聚:是指类的内部数据 *** 作细节自己完成,不允许外部干涉低耦合:尽量暴露少量方法给外部使用 封装(数据的隐藏)

信息隐藏:通常,应禁止直接访问一个对象中数据的实际表示,而应通过 *** 作接口来访问 记住这句话就够了:属性私有,get/set

public class Application {
    public static void main(String[] args) {
        Student student01 = new Student();
        student01.setName("lding");
        System.out.println(student01.getName());
    }
}

//类  private 私有
//封装大多是对属性来讲的:属性私有
public class Student {
    //属性私有:private属性,只能本类才能访问,其他类都访问不了
    private String name;    //姓名:name
    private int id;     //学号:id
    private char sex;   //性别:sex

    //对外提供属性的公共访问方法!
    //提供一些public的get/set方法,用于取值/赋值
    //get:获取数据的值
    public String getName() {
        return this.name;
    }
    // set:设置数据的值
    public void setName(String name) {
        this.name = name;
    }
}

封装的意义

提高程序的安全性,保护数据隐藏代码细节,可以在set中进行代码处理统一接口(get/set)系统的可维护性增加了,内部的结构可以自由修改

方法的重载:如println();方法,有好多个方法重载!

9.继承—OOP特征之二

继承extends

继承是Java面向对象编程技术的基石,因为它允许创建分等级层次的类继承的本质是对某一批类的抽象,从而实现对现实世界更好的建模extends的意思是“扩展”,子类是父类的扩展继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法。继承需要符合的关系是:is-a,父类更通用,子类更具体

Java中类只有单继承,不支持多继承!但支持多重继承!

单继承就是一个子类只能继承一个父类多重继承就是,例如 B 类继承 A 类,C 类继承 B 类,所以按照关系就是 B 类是 C 类的父类,A 类是 B 类的父类多继承就是:一个子类同时继承多个父类(Java是不支持的!!!)

继承是类跟类之间的一种关系。除此之外,类和类之间的关系还有依赖、组合、聚合等。

Java的访问控制修饰符:

default:默认,可以不写。在同一包内可见,不使用任何修饰符,使用对象:类、接口、变量、方法public:对所有类可见。使用对象:类、接口、变量、方法private:在同一类内可见。使用对象:变量、方法protected:对同一包内的类和所有子类可见。使用对象:变量、方法

package com.oop.demo09;
//Person 人: 父类,基类
//Java中,所有的类默认都直接或间接继承自Object类
public class Person {
    //父类的属性:money
    public int money = 10_0000_0000;
    //父类的方法:say()
    public void say() {
        System.out.println("say something");
    }
}
//快捷键:ctrl+h,打开继承体系
package com.oop.demo09;
//Student 学生 is Person :派生类,子类
public class Student extends Person {
    public static void main(String[] args) {
        Student student = new Student();
        student.say();      //继承自父类的方法say()
        System.out.println(student.money);  //继承自父类的属性
    }
}
package com.oop.demo09;
//Teacher 老师 is Person:派生类,子类
public class Teacher extends Person{
}
10.Super详解:重点理解

super需要注意的地方

super调用父类的构造方法,必须在构造方法的第一行super必须只能出现在子类的方法或者构造方法中!super和this不能同时调用构造方法!

this与super的对比

代表的对象不同:

this: 本身调用者这个对象super:代表父类对象的应用 前提

this:没有继承也可以使用super:只能在继承条件才可以使用 构造方法

this():本类的构造super():父类的构造

//Person 人: 父类,基类
//Java中,所有的类默认都直接或间接继承自Object类
public class Person {
    protected String name = "lding";
    public void print(){
        System.out.println("Person");
    }
    public Person() {
        System.out.println("Person无参构造执行了");
    }
}
//快捷键:ctrl+h,打开继承体系
//Student 学生 is Person :派生类,子类
public class Student extends Person {
    public Student() {
        隐藏代码:调用了父类的无参构造器
        //super();    //显式调用父类的构造器时,必须要在子类的第一行
        System.out.println("Student无参构造执行了");
    }
    private String name = "xding";
    @Override  //方法重写
    public void print(){
        System.out.println("Student");
    }
    public  void test(String name){
        System.out.println(name);	//参数传递过来的name
        System.out.println(this.name);	//本类的name
        System.out.println(super.name);	//父类的name
        print();	//本类的方法print()
        this.print();	//本类的方法print()
        super.print();	//父类的方法print()
    }
}
public class Application {
    public static void main(String[] args) {
        Student student = new Student();
        student.test("xgao");
    }
}

11.方法重写:重点理解

重写都是指方法的重写,以属性无关

static静态方法,与调用

public class Animal {
    public static void test(){		//此处使用static定义静态方法
        System.out.println("Animal=>test()");
    }
}
//继承
public class Cat extends Animal{
    public static void test(){		//此处使用static定义静态方法
        System.out.println("Cat=>test()");
    }
}
public class Application {
    public static void main(String[] args) {
        //静态方法的调用只与定义类实例的类有关
        Cat a = new Cat();
        Cat.test();		//此处不可以使用a.test(); 不应该通过类实例访问静态成员
        //父类的引用指向了子类
        Animal b = new Cat();
        Animal.test();	//此处不可以使用b.test(); 不应该通过类实例访问静态成员
    }
}
输出结果:
Cat=>test()
Animal=>test()

非静态方法的重写,与调用

public class Animal {
    public void test(){
        System.out.println("Animal=>test()");
    }
}
//继承
public class Cat extends Animal{
    @Override	//注解:重写,有功能的注解
    public void test(){
        System.out.println("Cat=>test()");
    }
}
public class Application {
    public static void main(String[] args) {
        Cat a = new Cat();
        a.test();
        //父类的引用指向了子类
        Animal b = new Cat();	//子类Cat重写了父类Animal的方法
        b.test();
    }
}
输出结果:
Cat=>test()
Cat=>test()

重写小结:需要有继承关系,子类重写父类的方法

方法名必须相同参数列表必须相同修饰符:范围可以扩大但不能缩小 private < default < protected < public抛出的异常:范围可以被缩小但不能扩大。

重写:子类的方法和父类的必须一致,只是方法体不同!

为什么需要重写?

父类的功能,子类不一定需要,或者不一定满足

------------------------------“笔记整理自跟着《狂神说Java》”----------------------------------​

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5715844.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-18
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存