封装和继承

本文详细介绍了面向对象编程中的封装、继承和访问修饰符的概念及应用。封装通过private关键字实现属性和方法的私有化,提供getter/setter方法确保数据安全。继承允许子类继承父类的属性和方法,减少代码冗余。访问修饰符如private、default、protected和public控制成员的访问范围。此外,还讨论了super关键字在子类中调用父类成员的作用以及方法重写的原则。
摘要由CSDN通过智能技术生成

封装和继承

private - 私有化

含义:私有化

作用:

  1. 修饰属性:私有化属性,不能让外界访问
  2. 修饰方法:私有化方法,不能让外界使用

应用场景:只能在本类中才能访问,不让外界访问的属性和方法,就用private修饰

封装

步骤:

  1. 私有化属性
  2. 添加 get (获取) / set (设置) 方法

好处:外界不能直接操作属性,必须通过get、set方法操作,提高代码的安全性,可以在get、set方法中添加其他的功能

this

含义:代表本对象。出现在方法中,表示调用该方法的对象

作用:

  1. this.属性:调用本对象的成员变量
  2. this.方法:调用本对象的成员方法
  3. this():调用本对象的构造方法(在一个构造方法中的第一句调用另外一个构造方法)

分包

基本作用:解决了类重名的问题

项目作用:项目中有许多的类,把功能相同的类放在同一个包中,方便管理

工具类:com.dream.util/tool

实体类:com.dream.vo/bean/entity

数据库类:com.dream.dao/mapper

static 关键字

作用
  1. 修饰属性

​ 类加载到方法区时,JVM会扫描该类的所有属性,并把静态属性加载到静态区中,静态属性属于类属性,该类所有的对象都共享该属性,静态属性直到项目结束时才会被回收

​ 注意:静态属性使用类名调用

  1. 修饰方法

    属于类方法,直接用类名调用

    应用场景:工具类

  2. 静态代码块
    1. 静态代码块是类加载到方法区时才会被调用,将类中的静态变量加载到静态区,该代码块只能初始化静态变量。
    2. 代码块是创建对象时优先于构造方法调用,该代码块可以初始化成员变量和静态变量。
    3. 构造方法是创建对象时调用,该方法可以初始化成员变量和静态变量

成员变量 vs 静态变量

成员变量:属于对象的变量,每个对象独享一份

静态变量:属于类的变量,所有对象都共享一份

静态方法

​ 含义:静态方法属于类的方法,直接用类名调用
​ 应用场景:工具类

静态代码块:类加载到方法区时调用

​ 可以初始化静态变量

public class A {
	String str1;
	static String str2;	

	static{
		str2 = "yyy";//A.str2
		System.out.println("A的静态代码块");
	}
    
}
代码块:创建对象时优先于构造方法调用

​ 可以初始化静态变量、成员变量

	{
		str1 = "xxx";//this.str1
		str2 = "yyy";//A.str2
		System.out.println("A的代码块");
	}
构造方法:创建对象时调用

​ 可以初始化静态变量、成员变量

public A() {
		
		str1 = "xxx";//this.str1
		str2 = "yyy";//A.str2
		System.out.println("A的构造方法");
	}

继承

概念:子类继承父类的属性和方法

好处:减少代码冗余

应用场景:多个类中,有相同的属性和方法,就抽取出来放在父类中

深入理解继承
1.创建子类对象,会调用父类构造方法吗?2.创建子类对象,先调用父类构造方法还是先调用子类构造方法?
	先调用子类构造方法
3.创建子类对象,先完成父类构造方法还是先完成子类构造方法?
	先完成父类构造方法
4.创建子类对象,会创建父类对象吗?
	不会
5.创建子类对象,调用父类构造方法的目的是什么?
	目的是在子类对象中开辟空间用于存放父类的属性
6.子类可以继承父类的私有化属性和方法吗?
	可以继承,但是不可以直接调用,但可以在父类中设置公有的方法,在公有的方法中调用私有的属性和方法,即间接调用。
    
public static void main(String[] args) {
		B b = new B();
		b.aMethod02();
	}

public class A {
	String aAtrr;
	//父类私有化属性
	private String a = "xxx";
  
	public A() {
		System.out.println("父类的构造方法");
	}
	//父类私有化方法
	private void aMethod01(){
		System.out.println("父类私有化方法");
	}
	
	public void aMethod02(){
		System.out.println(a);
		aMethod01();
	}
}

public class B extends A{
	String bAtrr;

	public B() {
		//super();//调用父类无参构造,默认实现
		System.out.println("子类的构造方法");
	}
}

super 关键字

super: 代表父类

作用在子类中:

​ 1.super.成员变量:调用父类的非私有化成员变量
​ 2.super.成员方法:调用父类的非私有化成员方法
​ 3.super():调用父类的非私有化构造方法
​ 注意:在子类的构造方法中必须是第一句就调用父类的构造方法

public class A {
	String str;
	
	public A() {
	}
	
	public void aMethod(){
		System.out.println("A类的方法");
	}
}

public class B extends A{
	
	public B() {
		//调用父类的非私有化构造方法
		super();
	}

	public void method(){
		
		//调用父类的非私有化属性
		super.str = "xxx";
		//调用父类的非私有化方法
		super.aMethod();
	}
}

方法重写(复写)

应用场景:父类的方法不满足子类需求时,可在子类中重写

条件:

​ 1.方法重写的位置在子类中

​ 2.重写方法的 返回值、方法名、参数列表都必须和父类的方法一致

​ 3.访问修饰符不能比父类更严格

//@Override - 注解:既解释给程序员也解释给程序,告诉程序这个方法是重写父类的方法
	@Override
	public void eat() {
		System.out.println(super.getName() + "正在吃午饭...");
	}

访问修饰符

含义:修饰属性、方法,用于定义变量的使用范围

使用权限高—>低 (private–>public)

访问修饰符本类本包其他包的子类其他包
privateOK
默认的(default)OKOK
protectedOKOKOK
publicOKOKOKOK
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值