Java知识点详解——封装和继承

封装:

封装概述:

将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问

通过类提供的方法来实现对隐藏信息的操作和访问

封装的两个原则:
  1. 把所有的属性藏起来
  2. 把尽可能多的东西藏起来,对外提供便捷的接口

封装的步骤:

1.修改成private

2.设置getter和setter方法

getter方法和setter方法的作用:

1. 提供公共的getter方法,允许其他类通过调用这些方法来获取属性的值,而不是直接访问属性。

2.私有属性提供公共的setter方法,允许其他类通过调用这些方法来修改属性的值,而不是直接修改属性。这样做的好处是可以在setter方法中添加一些逻辑,例如验证输入值的有效性,或者在修改属性值时触发某些事件。

3.在set中设置存储要求

包:

Java中的包机制也是封装的一种形式。

作用:

1.防止命名冲突,同样的名字可以放入不同的包内

2.包外的代码有可能不能访问该类,保护类

包的定义:

注意:package是关键字,package必须位于第一行(忽略注释行)只允许有一个package语句

package QuestionTxt04;
包的使用:

导入包用import

类的访问修饰:

修饰符:

static修饰符:

使用static关键词可以通过类名加"."直接调用类的成员,不需要创建类的对象,使用static修饰的方法属于类,不属于具体的某个对象。

1.静态变量

静态变量只在类加载的时候获取一次内存空间,这使得静态变量很节省内存空间。

  1. 用static关键字的属性成为静态变量或者类变量,
  2. static关键词修饰属性最常见的就是定义使用final关键字修饰的常量,常量要赋初始值 ,常量名一般由大写字母组成

定义静态变量:

 public static int staticVar;

调用静态变量:类名.静态变量名

public class MyClass {
    // 定义一个静态变量
    public static int staticVar = 10;
    
    public static void main(String[] args) {
        // 通过类名访问静态变量
        System.out.println("静态变量的值:" + MyClass.staticVar);
    }
}

2.静态方法

方法上加了 static 关键字,那么它就是一个静态方法:

  • 静态方法属于这个类而不是这个类的对象;
  • 调用静态方法的时候不需要创建这个类的对象,
  • 静态方法不能访问非静态变量和调用非静态方法。

定义静态方法:方法加上static

public static void staticMethod() {
    
}

调用静态方法:类名.方法()

public class MyClass {
    // 静态方法
     static void staticMethod() {
        System.out.println("This is a static method.");
    }

    public static void main(String[] args) {
        // 调用静态方法
        MyClass.staticMethod();
        // 直接通过类名调用静态方法

    }
}

3.静态代码块

用一个 static 关键字,外加一个大括号括起来的代码被称为静态代码块。

  1. 静态代码先于 main() 方法执行
  2. 静态代码块通常用来初始化一些静态变量;
public class StaticBlock {
    static {
        System.out.println("静态代码块");
    }

    public static void main(String[] args) {
        System.out.println("main 方法");
    }
}
// 结果是静态代码块先输出

继承:

继承是面向对象三大特性之一,解决代码冗余问题,Java只支持单继承

1.继承语法格式:
访问修饰符  class   Dog  extends  Animal{
    
}

Java中,子类可以从父类继承:

  1. 可以继承public 和 protected修饰的属性和方法,不论子类和父类是否在同一个包里
  2. 无法继承父类的构造方法和private成员
  3. 可以继承默认访问修饰符(就是不写public和private,直接空着),但是子类和父类要在同一个包里

2.使用super关键字调用父类成员

局部变量与成员变量重名是,成员变量会被屏蔽,若要访问成员变量要用this.成员变量名,但是this只能在构造方法中使用,所以就有了super,super关键字可以访问父类的构造方法,访问父类的属性和一般方法,super关键字用在子类当中

注意:

  1. super调用构造方法时,只能是第一句
  2. super只能出现在子类的方法和构造方法中,主方法不行
  3. super不能访问父类的private成员

访问父类构造函数:super(参数)

访问父类属性/方法:super.<父类属性或方法>

super(age,name,sex)     访问父类构造函数

super.age             访问父类属性

super.print()          访问父类方法

super关键字实例:

它将首先执行父类的makeSound方法,然后执行子类特有的行为。

class Animal {
    String name;

    Animal(String name) {
        this.name = name;
    }

    void makeSound() {
        System.out.println("Animal makes a sound");
    }
}

class Dog extends Animal {
    String breed;

    Dog(String name, String breed) {
        super(name); // 调用父类的构造方法来初始化name字段
        this.breed = breed;
    }

    void makeSound() {
        super.makeSound(); // 调用父类的makeSound方法
        System.out.println("Dog barks");
    }
}
3.实例化子类对象

当在java中创造一个对象的时候,会首先执行父类的构造方法,然后才执行子类的构造方法,按照父类,子类的顺序执行构造方法

一个类的构造方法有两种情况会被执行:

1.创建该类的对象,实例化

2.创建该类的子类的对象,

子类继承父类时构造方法的调用规则:

1.子类没有用super(参数)调用构造方法,系统会默认先调用父类的无参构造方法,和super()一个意思,加不加都行

2.如果子类中使用super(参数)调用了父类的有参构造,那么将执行父类相应的构造方法,而不是父类的无参构造

4.Object类

Object类是所有类的父类,所有的java类都直接或间接继承了Object类

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值