javaSE-封装-继承-多态

目录

一.封装

1.概述

2.包机制

3.权限控制修饰符

二.继承

1.概述

2.语法

3.Super关键字

1.super和this的区别

2.解决的问题

3.实例语句块的执行时机

4.方法重写

5.final关键字

三.多态

​ 1.编译时多态

​ 2.运行时多态

四.软件设计六大原则

1.单一职责原则

2.里氏替换原则​

3.依赖倒置原则

4.接口隔离原则

5.迪米特原则(最少朋友原则)

6.开闭原则


一.封装

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.普通的直接引用

与this类似,super相当于是指向当前对象的父类的引用,这样就可以用http://super.xxx来引用父类的成员。

2.子类中的成员变量或方法与父类中的成员变量或方法同名时,用super进行区分

class Person{
    protected String name;
 
    public Person(String name) {
        this.name = name;
    }
 
}
 
class Student extends Person{
    private String name;
 
    public Student(String name, String name1) {
        super(name);
        this.name = name1;
    }
 
    public void getInfo(){
        System.out.println(this.name);      //Child
        System.out.println(super.name);     //Father
    }
 
}

public class Test {
    public static void main(String[] args) {
       Student s1 = new Student("Father","Child");
       s1.getInfo();
 
    }
}

3.引用父类构造函数

1.super和this的区别

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

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

2.解决的问题

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

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

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

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

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.方法重写

什么时候需要重写

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

重写条件

​ 1.有继承关系的体系中

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

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

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

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

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
发出的红包

打赏作者

mizui_i

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值