JAVA 12 高级面向对象

可以把这个学生类看作成一张学生表
通过这张学生表我们可以创建学生对象s1,s2
这个类里面的age成员变量没有加static修饰
加了static修饰的成员变量叫类变量,在计算机里只有一份是被类的全部对象共享的
没有加static修饰的前变量称之为实例变量,每个对象中都会有一份他认识的这两种变量

首先它会把test类提取到方法区里面来执行

 

这行代码他要碰学生类

学生类加载过来的时候呢
它会检查这个学生类里面有没有类变量
发现有类变量
他会与这个类一起加载
它会立即把这个类变量内加载到堆内存中去的
它会在堆内存中开辟区域来代表这个类变量
name一开始里面装的是null
然后这个学生类可以去找到这个类变量内部的

然后最左边再为这个类变量的name附了个值袁华

 

新的学生对象
这个学生对象里面会放实例变量age的
这个aage是属于对象的
把这个里面的值又改成了秋雅了
学生对象           name

学生对象
这个学生对象里面没有name,然后他会去找学生类
再通过学生类来找到这个类变量name
此时这里面的值已经是秋雅
因此输出结果是秋雅

 

找的肯定是同一个类变量name打出来的值
最终装的肯定也是秋雅

学生对象
找到这个学生对象里面的实例变量
也就是对象变量age
把里面存的值改成了23
 

学生对象
把第二个学生对象里面的对象变量age
存储的值又改成了18

他肯定是找到第一个学生对象里面的实例变量age
此时这个里面的值是23了

 

第一个学生对象的age
还是第二个学生对象的age
这个代码他是不清楚的
所以他就给你报错啦

 

User是构造器

 

 撒大苏打撒旦撒

类方法它指的是我们内中的某个成员方法,它一旦加了static修饰了,那么它就是类方法
 
定义一个double类型的成员变量来记住分数

 

这行代码会碰学生类
于是他会把学生类也加载到方法区里面来执行
然后通过学生类来正式来调这个类方法
他会通过这个学生内找到这个print hello world
这个方法由static修饰是个类方法
它是允许用类名调的

 

 

这个学生对象里面会放它的对象变量score  一开始值为0
接着这个学生对象会指向下面这个学生类

 

再通过学生对象找到这个类
再通过这个类找到要调的是print hello world
由于这个方法是static修饰的类方法
它也是支持被对象共享访问的
于是对象调它也可以调
也会打印两行hello world

 

 

由于现在是对象来调这个实例方法
print pass那是可以调的啊
那这个print pass方法里面
它会访问当前对象的这个score
成员变量里面的值
零点输出的是成绩不及格

print pass为什么报错呢
它会通过类名到这边来
然后去找到这个print pass方法
print pass方法由于它是对象的方法
它是不允许你用内名掉的
并且这个print parse方法里面
是不是还要访问对象的那些成绩
所以啊实例方法也就是对象的方法
你只能用对象调它好了

 

 

 

 

 

1.类方法中可以调用类变量
也可以访问类方法
我们不能在类方法中去访问实例变量
说明我们不能在类方法中去访问这些实力成员,因为这些实力成员它是属于对象的
你肯定要用对象来访问

 

这个类方法是不是可以用类名来调的呀
那么当别人用类名来调这个方法的时候
而这个方法内部的this他是要拿到当前对象的
但是现在没有对象来调这个类方法
所以this是不能出现在内方法里面的

 

定义啦一个类变量

 

因为在加载这个学生内的时候
里面这个类变量school name其实也会同时加载的
然后他会马上去执行这个静态代码块
它是可以直接去访问这个类的成员school name的

 

说明他此时又是先执行的实例代码块
再执行的这个有参数构造器的
现在我们这个学生类这里有一个实例变量,就是int age
那么我们就可以在这个实例代码块里面,为这个age赋值,比如说18为啥可以在这里赋值呢
因为age是对象的变量,而实例代码块是每次创建对象的时候就会执行
那它就可以访问这个对象里面的对象变量

 

 

标题

 

 

 

 

 

 

以后呢我们就会把这个b类称之为子类,而把上面这个a类称之为父类
用b类来创建一个对象,就叫小b好把它new出来
现在这个地方的b类它是继承了a类的,也就是说b这张设计图
它是继承了a这张设计图的,所以你在用b来new这个b对象的时候
java会用a和b这两张设计图,一起来做这个地方的b对象
也就是继承体系下b对象,此时是用多张设计图一起做出来的
当然b对象能直接访问什么成员,它也是由这两张设计图共同来决定的
这两张设计图对外暴露了什么成员,这里的b对象就可以访问什么成员

接着用b对象去访问
通过小b

所以外面是可以去访问的

 

 

 

这个方法是由public修饰的

 

因此我们在程序中肯定会定一个讲师类,用来处理讲师的数据
还会定义一个咨询师类,用来处理咨询师的数据
在讲师类里面我们会设计name scare,两个成员变量
下面会提供一些get set方法

在咨询师类里面,同样我们也会定义两个成员变量
一个name,一个是解答问题的总人数
下面同样也提供了一些get set方法

老师类就相当于得到了人类中的这些代码了
这张设计图共同创建出来的这个对象的

 

A类,这个方法里面写的是复习数学
接着我又有一个b类,这个b类里面我也写了一个method的方法,
这个method方法里面写的是复习语文

接着我们再来定义一个c类,那我就让这个c类同时继承a类和b类
接着我再用这个c类去创建一个对象
c它是会由它的父类a,b,c这张设计图
那接着我们就可以用这个c对象去调用,method的方法

他们都是直接或者说是间接继承了object
会有我们设计的这个类以及object类

 

肯定是可以去访问a里面的这些方法,比如print1,2
这两个方法它调用的肯定都是父类a里面的..

重写几乎都一样
他会就近选择b类里面的这两个重写的方法

get set 有参无参
会默认继承ob类
它默认会去调object类里面的tostring方法
返回的是对象的地址
重写个
调就近的重写方法

 

说明这个every list这个类里面
它是不是也把object类里面的图方法进行了重写,它会掉自己重写

右键,再找到这个地方的to string 他会自动生产这个重写方法  tostring获得字符方法

this就可以访问当前子类对象的这个成员变量
super 超级超类, 父类就是超类,所以他会指定去找当前这个子类的父类
然后去父类里面找东西,因此直接在这个super的后面加上点name
它就可以指定去找父类里面的那个成员变量name

 

标题

 

先定义一个父类class f
接着我到这下面来再定义一个子类class z
让这个子类去继承一下这个父类
然后到父类这里来
把他的这个无参构造器给它写出来
方便一会儿观察public f小块大块

我们也把它的构造器写出来子类
那我先写一个子类的无参构造器出来

我现在来创建一个子类z的对象出来
他会去调这个子类的无参构造器啊
说明我们在创建子类对象
这个子类对象去调查自己的无参构造器的时候
它会先去调用父类的无参构造器
然后再回来是不是执行自己这个代码
子类是会先去调用父类的无参构造器

这个有参构造器的时候
同样他也会先去调用父类的无参构造器
再回来执行自己这个有参构造器里面的代码的
子类的全部构造器它都会先调用父类的构造器,再执行自己的
其实在子类的全部构造器的第一行这里啊
它都会有一个super括号的代码的

同学们可以在这边手写一个有参数构造器出来
有参数构造器一旦出来了之后
这个f类里面默认的无参构造器没有了

设置变量,提供get set,提供有参无参
标题
class teacher 类代表老师,接着让他继承一下这个paper类
创建老师对象来封装一个老师的数据
引入继承之后,它实际上是由老师内这张设计图
以及人类这张设计图
就是多张设计图共同创建出来的一个老师对象
那这个老师对象也就是这个t对象里面
他肯定是包含了老师类里面的这个成变量
同时也包含了它的父类成原变量
这个name以及这个a级通过super呢送到父类,有参构造器来
这里为什么能够直接为当前对象的scr赋值呢
它是由子类这张设计图在管理的啊
由于引入了继承我们原来的一个类啊
被迫拆分成了这两个类
也就是这两张设计图了
由于被迫拆成的这两张设计图
处理对象数据的构造器
也被拆分到了这两张设计图中了
第2个小括号像这里处理老师对象的name和a级的构造器,是放在父类中的
而处理scare的这个构造器又是放在了子类里的
所以为了把对象的数据处理完整的
子类对象在调用自己的构造器的时候
这个构造器它肯定是需要先去调用,父类的构造器,把对象里面的name和a级处理
再回来处理自己的这个skill,这样才能把对象的数据完整的处理了

传这三个数据

接到李4年龄36和技能是java
接着呢他把这个名字李四和年龄36

在继承的这种情况下
由于处理对象数据的构造器
它拆到了多个类里去了
所以当我们创建这个子类对象的时候
子类对象在调用子类的构造器的时候
它肯定需要先去调用它的父类的构造器
把对象里面包含的父类这部分的成员变量
先进行初始化赋值
再回到子类构造器这里来
把对象里面包含的子类
这部分的成员变量也进行初始化赋值

成员,get set ,有参,无参
再来提供一个有参构造器出来初始化对象
它只接名字和年龄
认为这种情况下学生是没有填学校的啊
然后这里面呢就直接为当前这个学生对象的name
优化,这时候我们就可以把上面这个有参构造器的,调用下面这个有参构造器
为当前这个学生对象做数据的初始化赋值

this括号和super括号不能同时出现

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值