Java随堂小记07

本文介绍了Java中的封装概念,强调了数据隐藏和getter/setter方法的重要性。接着讲解了继承的单继承特性,并展示了如何调用父类方法。接着讨论了Object类及其super关键字的使用,以及构造器中super的调用规则。文章还详细解释了方法重写的要求和应用场景。最后,探讨了多态的概念,强调了多态在方法调用中的表现和注意事项。
摘要由CSDN通过智能技术生成

封装

程序设计追求高内聚,低耦合高内聚:类的内部数据操作细节自己完成,不允许外部干涉;低耦合:仅暴露少量的方法给外部使用。
封装(数据的隐藏)

通常,应禁止直接访问一个对象中数据的实际表示,而应通过操作接口来访问,这称为信息隐藏。
属性私有,get/set

快捷键alt+insert
在这里插入图片描述

package www.Dongyi.oop;


public class Demo2 {
    public static void main(String[] args) {
        Student s1 = new Student();
        s1.setName("dy小仙女");

        System.out.println(s1.getName());
        s1.setAge(999);//不合法的
        System.out.println(s1.getAge());

    }
}

package www.Dongyi.oop;

public class Student {
    private String name;
    private int id;
    private char gender;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public char getGender() {
        return gender;
    }

    public void setGender(char gender) {
        this.gender = gender;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        if (age > 120 || age < 0) {
            this.age = 3;
        } else {
            this.age = age;
        }
    }
}

继承

格式: 子类 extends 父类

Java中类只有单继承,没有多继承,即一个子类只有一个直接父类

继承是类和类之间的一种关系。

package www.Dongyi.oop;

public class Father {
    public void say(){
        System.out.println("说了一句话");
    }

    private int money = 10_0000_0000;

    public int getMoney() {
        return money;
    }

    public void setMoney(int money) {
        this.money = money;
    }
}

package www.Dongyi.oop;

public class Son extends Father {
    //子类继承了父类,就会拥有父类的全部方法!


}

package www.Dongyi.oop;

public class Demo3 {
    public static void main(String[] args) {

        Son son = new Son();
        son.say();
        son.setMoney(9_0000_0000);
        System.out.println(son.getMoney());
    }
}

Object

快捷键 Ctrl+h
在这里插入图片描述
object类:在Java中,所有的类,都默认直接或者间接继承Object类

super

package www.Dongyi.oop.Demo4;

import www.Dongyi.oop.Demo4.Person;

public class Student extends Person {
    public Student() {
        //隐藏代码:调用了父类的无参构造super();调用父类构造器必须要在子类和构造器的第一行
        System.out.println("Student无参执行了");
    }

    private String name = "Student";

    public void test1(String name){
        System.out.println(name);
        System.out.println(this.name);
        System.out.println(super.name);
    }

    public void test2(){
        print();
        this.print();
        super.print();
    }

    public void print(){
        System.out.println("Student:dy");
    }
}


package www.Dongyi.oop.Demo4;

public class Person {
    public Person() {
        System.out.println("Person无参执行了");
    }

    protected String name = "Person";

    public void print(){
        System.out.println("Person:dy");
    }
    //私有的东西无法继承
}
package www.Dongyi.oop.Demo4;

public class Application {
    public static void main(String[] args) {

        Student student = new Student();
        student.test1("dy小仙女");
        student.test2();
    }
}

super注意点
1.super调用父类的构造方法,必须在构造方法的第一个
2.super必须只能出现在子类的方法或者构造方法中!
3.super和this不能同时调用构造方法!

this和super
代表的对象不同:
this:本身调用者这个对象
super:代表父类对象的引用
前提
this:没有继承也可以使用
super:只能在继承条件下才可以使用
构造方法
this();本类的构造
super();父类的构造

方法重写

重写只能是非静态、public
快捷键:alt+insert

package www.Dongyi.oop.Demo5;

public class A extends B{
    //alt+insert

    //Override 重写
    @Override//注解:有功能的注释!
    public void test() {
        System.out.println("A=>test");
    }
}

package www.Dongyi.oop.Demo5;

public class B {
    public void test(){
        System.out.println("B=>test");
    }
}

package www.Dongyi.oop.Demo5;

public class Application {
    public static void main(String[] args) {
        A a = new A();
        a.test();

        //父类的引用指向了子类
        B b = new A();
        b.test();
    }
}

因为静态方法是类的方法,而非静态是对象的方法
有static时,b调用了B类的方法,因为b是用b类定义的
没有static时,b调用的是对象的方法,而b是用A类new的
即b是A new出来的对象,因此调用了A的方法

重写:需要有继承关系,子类重写父类的方法!
1.方法名必须相同
2.参数列表必须相同,否则就像重载
3.修饰符:范围可以扩大: public > protected > default > private
4.抛出的异常:范围,可以被缩小,但不能扩大

重写:子类和父类方法一致,方法体不同

多态

package www.Dongyi.oop.Demo6;

public class Person {
    public void run(){
        System.out.println("run");
    }
}
package www.Dongyi.oop.Demo6;

public class Student extends Person{
    @Override
    public void run() {
        System.out.println("son");
    }

    public void eat(){
        System.out.println("eat");
    }
}

package www.Dongyi.oop.Demo6;

public class Application {
    public static void main(String[] args) {

        //子类能调用的方法都是自己的或者父类的
        Student s1 = new Student();
        //父类可以指向子类但是不能调用子类独有的方法
        Person s2 = new Student();//父类的引用指向子类的类型
        Object s3 = new Student();

        s2.run();//子类重写了父类的方法,执行子类的方法
        s1.run();

        //对象能运行哪些方法,主要看左边的类型,和右边关系不大
        //s2.eat();会报错
        s1.eat();
        ((Student) s2).eat();//强制类型转换
    }
}

多态注意事项:
1.多态是方法的多态,属性没有多态!
2.父类和子类要有联系,否则类型转换异常!ClassCastException!
3.存在条件:继承关系;方法重写;父类引用指向子类对象! Father f1 = new Son();

以下不能重写
1.static 方法属于类,不属于实例,不能重写
2.final 常量
3.private方法
不能重写就没有多态!

父类的方法子类可以调用,子类和父类共同的方法就调用子类,因为子类重写了父类的方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Protobuf是一种高效的序列化协议,可以用于数据交换和数据存储。它的主要优势是大小小,速度快,可扩展性强。下面是使用Protobuf的一些小记: 1. 定义消息格式 首先,需要定义消息格式,以便Protobuf可以将数据序列化和反序列化。消息格式定义在.proto文件中,使用protobuf语言编写。例如,下面是一个简单的消息格式定义: ``` syntax = "proto3"; message Person { string name = 1; int32 age = 2; } ``` 这个消息格式定义了一个名为Person的消息,包含两个字段:name和age。 2. 生成代码 一旦消息格式定义好,就可以使用Protobuf编译器生成代码。编译器将根据消息格式定义生成相应的代码,包括消息类、序列化和反序列化方法等。可以使用以下命令生成代码: ``` protoc --java_out=. message.proto ``` 这将生成一个名为message.pb.javaJava类,该类包含Person消息的定义以及相关方法。 3. 序列化和反序列化 一旦生成了代码,就可以使用Protobuf序列化和反序列化数据。例如,下面是一个示例代码,将一个Person对象序列化为字节数组,并将其反序列化为另一个Person对象: ``` Person person = Person.newBuilder() .setName("Alice") .setAge(25) .build(); byte[] bytes = person.toByteArray(); Person deserializedPerson = Person.parseFrom(bytes); ``` 这个示例代码创建了一个Person对象,将其序列化为字节数组,然后将其反序列化为另一个Person对象。在这个过程中,Protobuf使用生成的代码执行序列化和反序列化操作。 以上是使用Protobuf的一些基本步骤和注意事项,希望对你有所帮助!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值