day_15、 封装、继承、super 、 final

2 篇文章 0 订阅

一、封装

1、概述

		不直接提供访问的数据,而是提供访问的接口。

2、包机制

	package: 设置的是编译之后的class文件的保存目录,和源文件没有关系

如果没有设置package语句,则class文件和 java文件在同目录

作用

1.为了解决命名冲突问题

2.package语句只能出现在java源文件的第一行

3.通常采用公司域名倒序的方式,

例如:com.tledu.oa.system

com.公司名.项目名.模块名

4.完整的类名是带有包名的

​ 带有包名的类:

​ 编译: javac -d 生成路径 源文件

​ javac -d ./ -encoding utf-8 A.java

java com.tledu.zrz.A

public class com.tledu.zrz.A{
    
}

导入机制

import 包;

import com.xxx.aaa.A;//导入A类

import com.xxx.aaa.*;//导入这个包下的所有类

注意:java.lang.*下的类是核心类,不需要导入

静态导入

在访问这个类的静态属性的时候,可以直接写名字,不需要加类名前缀。

3、 权限控制修饰符

访问控制符

private 只能在本类中使用

default 不加就是default,在同一个包中都可以访问

protected 同包,或者有继承关系

public 都可以访问

二、继承

1、概述

从已有类中派生出新的类,新的类能有已有类的非私有属性和行为,并可以拓展新的属性和行为

目的:代码重用

1.java中只支持单继承,一个类只能有一个父类,但是一个类可以拥有多个子类

2.private私有的属性不能继承

3 如果一个类没有显示继承另一个类,则默认继承Object(java.lang.Object)

​ Object是java提供的根类(祖宗)

​ 任何类都直接或者间接继承Object

2、语法

class 子类名 extends 父类名{}

3、super关键字

保存了父类型特征,可以理解为是父类对象

1 区分子类和父类同名的变量方法
2 super(....)只能在子类构造方法第一行,用来调用父类构造放大
		this(.....)也是必须在第一行所以this(...)和super(....)不能同时出现
		如果构造方法中没有this(....) 也没有super(....) 则构造方法第一行默认有supre() 调用无参构造

3.1super 和this的区别

super其实没有指向父类的对象,而是指向了父类的数据块,this是当前对象的引用

super:保存了父类型特征,可以理解为是父类对象

3.2解决的问题

区分父类和子类重名的属性或方法

super(…)只能用在子类构造方法第一行,用来调用父类构造方法

注意:this(…)也是必须在构造方法第一行,所以this()和super()不能同时出现

如果构造方法周总没有this(),也没有super() 则构造方法第一行默认有super() 调用父类无参构造

3.3实例语句块的执行

代码

父类

class Father{
    public Father(){
		System.out.println("父类的构造方法执行了");
	}
}

子类

class Son{
    {
        System.out.println("实例语句块执行了");
    }
    public Son(){
        super();
		System.out.println("子类的构造方法执行了");
	}
}

测试:

class Main{
    public static void main(String[] args) {
		//测试实例语句块的执行时机
		Son son = new Son();	
	}
}

运行结果:

在这里插入图片描述

结论:

实例语句块的执行时机是父类构造方法执行完成之后,也就是super()方法执行之后

4.方法重写

什么时候要重写

​ 当父类不能满足子类需求的情况下,需要使用到方法重写

重写条件

有继承关系的体系中

​ 方法名相同,参数列表相同,返回值相同

​ 不能比原方法拥有更低的访问权限

​ 不能比原方法拥有更宽泛的异常

​ 覆写,特指成员方法,和静态比那里,静态方法,成员变量无关.

Override和Overload区别:

​ override是重写,overload是重载

​ overload解决的问题是方便记忆,而override解决的问题是满足子类的需求

//父类
class Father{
    public void m1(int a){
        //这里是父类方法的具体实现
    }
}
//子类
class Son extends Father{
    public void m1(int a){
        //这里是子类方法的具体实现      
    }
} 

5.final关键字

final是一个修饰符,表示最终的

作用:

final修饰的类不能被基础,

final修饰的成员方法,不能被重写

final修饰的变量没有默认值,并且不能二次赋值,必须显示赋值

常量:一般使用 public static final修饰 简称psf,整个程序生命周期值不能被修改

三、多态

父类引用指向子类对象,使用父类类型声明的变量保存子类对象的引用

语法:父类 变量 = new 子类();

java中提供了两种多态形式

1.编译时多态

​ 编译时多态是静态的,主要指方法重载,他根据不同的参数列表来区分不同的方法

​ 编译之后就会变成不同的方法,在运行时,就谈不上多态了,只是不同的两个方法而已

2.运行时多态

​ 运行时多态是动态的,主要是指动态绑定来实现,指子类实现父类的方法

四、软件六大设计原则

1、单一职责原则

功能职责单一,只拥抱一种变化。

2、里氏替换原则

所有能使用父类的地方,都有可以换成子类。

3、依赖倒置原则

高层依赖抽象,细节依赖抽象

4、接口隔离原则

最小接口原则,不然就需要实现很多不必要的方法。

5、开闭原则

对修改关闭,对拓展开放。

6、迪米特原则

最少接触原则,一个类对于其他类知道的越少越好,就是说一个对象应当对其他对象有尽可能少的了解,只和朋友通信。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值