从吃麻辣烫的角度看权限修饰,看继承

Note 2021-03-31T08.48.43

static定义的变量是共享的;
static定义的变量就好像公筷,吃饭的时候(引用)谁都可以用
如果有void,肯定不是构造方法;
有void,麻辣烫就是放辣的,没有void就是不放辣的
构造方法名字和类名要相同;
你到麻辣烫店里面点汉堡就有点过分了
当有了有参构造方法,没有定义无参构造函数的时候,不会自动生成无参构造;
做麻辣烫的时候,厨师默认是清汤的,但你可以决定自己要放多少辣,每个麻辣烫放的盐辣可以不一样,这个分量就是构造函数的参数

传值和传应用

传值:基本类型;
每个桌子上麻辣烫里面的辣度,你往自己麻辣烫里面放辣椒,不会改变其他人麻辣烫的辣度
传应用:引用类型传递(传递的是地址,拥有相同地址的变量指的是同一个对象,操作的数据是相互的);
自己桌子上麻辣烫的辣度,当你同桌往麻辣烫里面放了辣椒之后,辣度就会改变,任何人再尝的时候味道就会改变

this

是什么?

每个对象中,保存当前内存地址的一个引用类型变量,相当于当前对象自己;
你自己的麻辣烫里面的白菜可以写成this.白菜,这个this就是你自己的麻辣烫
谁调用当前方法,this就是谁;
别人用this指白菜的时候,指的就是别人的麻辣烫了

能干什么

①在成员方法或者构造方法中,用来区分同名的局部变量和成员变量;
依旧是默认清汤(成员变量),当你反馈厨师说你要变态辣(局部变量),并不意味其他人的麻辣烫也会变成变态辣
②this不能出现在静态环境中,因为静态环境中没有this这个概念;
麻辣烫里面不能放铁(this变量),因为铁不能吃
③return this返回当前对象内存地址,可以做到链式调用;
在吃麻辣烫之前,你发现麻辣烫不够辣,可以找到那个厨师给你做的麻辣烫(return this),然后可以找到这个厨师做的其他麻辣烫,看看够不够劲
④用在构造方法中,调用当前类中重载的构造方法this(xxx),必须在第一行;
有的店里面麻辣烫不是清汤,而是在你没有提出要求前会固定放入适当的调料,改变辣度,改变甜味,改变酸味等等,这个就是this(辣,甜,酸),但在这个参数中,你就不能瞎改,因为这是人家配的合适配比

怎么用

class B{// ①
    private int age;
    public void setAge(int age){
        this.age=age;
    }
}
public class A{// ②
    public static void main(String[] args){
        // 不能有this
        // 会报错:无法从静态上下文引用非静态变量this
    }
}
class C{// ③
    public void m1(){
        System.out.println("我是m1");
        return this;// 返回值变为C
    }
    public void m2(){
        System.out.println("我是m2");
    }
}
public class C1{
    public static void main(String[] args){
        C c = new C();
        c.m1().m2();
    }
}
// ④ 语法:this(参数) 必须在第一行
class MyDate{
    int year;
    int month;
    int day;
    public MyDate(){
    // 这个地方不能有其他语句
        this(1970,1,1);// 无参构造默认值
    }
    public MyDate(int year,int month,int day){
    this.year=year;
    this.month=month;
    this.day=day;
    }
    public void println(){
        System.out.println(year+","+month+","+day);
    }
}
public class This_03{
    // 需求必须有年月日
    MyDate d1 = new MyDate();
    d1.println;
}

Static

是什么

是修饰符,区别静态和成员属性;
看是公筷(静态)还是私筷(成员)

能干什么

①static修饰的类体中的变量是静态变量;
只要有static就是公筷
②satic修饰的类体中的方法是静态方法;
用公筷去夹东西
③static修饰的语句块是静态语句块;
从要拿公筷到放下公筷的过程全部或者一部分
静态属性是类加载阶段执行初始化;
什么时候进行类加载?
访问一个类的静态属性的时候,把该类放入静态区;
要用公筷夹(自己桌子上的麻辣烫)东西(静态属性),麻辣烫必须在自己桌子(静态区)上

怎么用

public class Static_01{
    static int i = 2;// ①
    public static void m1(){// ②
         System.out.println("s");   
    }
}
static{// ③ 静态语句块等价于静态方法,只不过它没有名字,不能重复执行,在类体中;自动执行且整个生命周期只执行一次,类加载完直接执行,在main方法前执行;多个static静态语句块按照从上往下执行;

}

静态语句块和静态变量优先级相同;
吃麻辣烫用公筷夹东西的过程中的一部分或者全部和公筷是否存在是同等重要的

动态语句块

{// 语法结构
    // java代码
}

等价于成员方法;
调味料怎么放
而成员属性依赖对象;
放多少是因为顾客(对象)需求决定
创建对象之后立刻执行,创建一次对象,执行一次;
厨师会根据顾客的需求做出不同口味的麻辣烫
动态语句块在构造方法前执行;
厨师必须先知道顾客想法才能做饭,总不能你去吃辣过敏,厨师给你做变态辣
创建对象≠构造方法;
顾客(创建对象)提出要求,厨师听到要求(构造方法),做不同的麻辣烫(动态语句块)
静态是所有对象共享的,成员是对象私有的;
公筷是大家都可以用的,私筷是你自己使的
如果对象有相同属性,不同的值使用成员变量,对象有相同属性,共同的值,使用静态变量;
如果你们是三个人去吃麻辣烫(相同属性),三个人口味一样,吃的东西也一样,可以点一份(值也相同);可要是口味不一样,吃的东西也不一样,就需要点三分(成员变量)
空指针使用null值调用成员属性空指针异常,而静态属性,对象无关,有没有堆内存对象无所谓,只要这个变量是原本类型的,就能调用静态属性;
不管你去或者不去,麻辣烫店就开在那里(静态属性),你不去,麻辣烫桌子上就不会有你的麻辣烫(成员属性)

封装

封装就是把对象所有组成部分组合在一起,使用权限修饰符将数据隐藏起来,控制用户对数据的不合理操作;
麻辣烫秘方只能厨师知道
作用:
适当的封装能够让代码更容易理解和维护,加强了代码安全性;
顾客不能偷学麻辣烫秘方

软件包机制

目标
文件的代码和运行;
麻辣烫地址
文件名:找到这个文件的全路径就是文件名;
①为了解决命名冲突的问题(类名前加前缀package);
麻辣烫店很多,杨亮,张亮傻傻分不清楚
②java使用package语句定义包;
③package规定class文件的保存位置;
什么麻辣烫,重要的是麻辣烫,不是什么
④package语句只出现在java文件第一行;
吃麻辣烫前最先应该找到店
⑤命名规则一般采用公司域名倒序;
⑥完整的类名是带有包名的;
⑦带有package语句的java文件编译;
javac -d 生成路径 -encoding 编码 源文件路径
javac -d./-encoding utf-8 A.java
⑧带有package语句的class文件运行;
java 包名 类名

import

import语句引入当前类需要的其他包中的类;
和麻辣烫店的碗筷自取一个道理
import语句只能在class语句之上,package语句之下;
java.lang.*下面的所有类都不需要导入,因为java.lang是核心包;

权限修饰

在这里插入图片描述

private:除了当前类都不能访问;
有些麻辣烫店里面麻酱只在厨房,厨师才能用
public:哪里都可以访问;
麻辣烫店里的麻酱谁都可以用,哪怕是隔壁做热干面的
default:不写修饰符,默认default,当前类或者当前包下可以访问;
麻辣烫里的麻酱只能让顾客和厨师使用
protected:受保护的,继承权限,没有继承关系,同包可以访问,要么有继承关系,要么同包;
除了顾客和厨师,要是麻辣烫的分店也可以过来用这边的麻酱

继承extends

在这里插入图片描述

是什么

Java只支持单继承,将继承关系简单化,易于管理,为了解决单继承的问题,Java提出了接口,一个类可以实现N个接口;
单继承就是麻辣烫只能总店开分店,一个总店有无数分店,分店只有一个总店
如果一个类没有显示继承几个父类的话,默认继承Object;
Object就是最大的麻辣烫总店
私有无法被继承,可以通过getter/setter对私有属性进行操作;
我麻辣烫店是独家秘方,其他麻辣烫店不能用我的秘方,但是只要有钱(get/set)就能对我的数据进行借用
目的:代码重用;
最大功能扩展:方法覆写;
构造方法不能被继承;
构造方法就好像北京的麻辣烫,它要在南京开分店,那它就是南京的麻辣烫(构造方法名和类名相同)

能干什么

代码重用后,父类进行编码,子类可以直接用;
总店出月饼麻辣烫了,分店就可以出
如果功能不能满足子类需求,还可以对功能进行重写;
分店麻辣烫可以推出自己的臭豆腐麻辣烫
使用多态;

怎么用

Class 子类名 extends 父类名{}

Super

this是指当前对象引用,super指当前对象的父类对象的引用,继承子类可以访问父类的成员,所以this可以访问自己的成员,还可以访问父类的成员;
this就是南京麻辣烫分店,super是北京麻辣烫分店
在这里插入图片描述

在成员方法和构造方法中,可以用super去访问父类属性;
super不能出现在静态上下文中;
用在子类构造方法中,使用super去调用父类的构造方法;
静态导入 User类中的静态属性,可以再当前类中直接写名字使用;
// 使用其他类中 的静态属性,需要加类名;
1 用在成员方法和构造方法中 可以通过super去访问父类的属性,可以通过super区别子类和父类同名的属性;
麻辣烫分店调料没有了,可以去总店进货
2 super不能出现在静态上下文中,尽管在成员方法/构造方法中,也必须是 super.xxx 的形式;
3 用在子类构造方法中,使用super(xxx) 去调用父类的构造方法;
如果子类构造方法中没有显示定义 this(xxx) / super(xxx) 则 默认第一行有个 super() 调用父类的无参构造;
并且 this(xxx) 和 super(xxx) 这种写法,都必须出现在构造方法第一行,所以这两种写法不能同时存在;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卑微-程序员

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

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

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

打赏作者

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

抵扣说明:

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

余额充值