2020-11-06

                                  类和对象

类和对象与封装

一、 使用构造方法创建对象

(1)new操作符创建一个对象
(2)new后面的方法即是构造方法
(3)构造方法是一种特殊的方法 ,有以下特殊之处:① 没有返回值类型 ② 必须和所在类名字相同 ③ new操作符调用生成一个对象

二、构造函数

(1)类中如果没有给定构造函数,系统会自动生成一个默认无参构造函数,如果人为 给定一个构造函数,系统则不会生成。
##三、构造函数的作用
(1)类属性进行赋值
(2)给对象开辟内存空间

三、this引用类的当前实例

(1)每一个类都会有自己的this引用 this引用指向当前对象本身 ,作用就是在类中,让类中的方法可以调用本类中的另外一个方法或者属性 。

四、静态变量

(1) 静态变量被类中所有对象所共享 static修饰的变量 , 如果想要访问静态变量,类名.XXX去访问,对象.XXX访问,推荐类名.XXX去访问 。
(2)静态变量值被存储在一个公共的内存空间中,如果说一个对象修改了当前静态变量值,对于其他对象来说是立即可见 。
(3)静态方法 static修饰的方法

五、实例方法和静态方法之间可以互相调用吗?

(1)非静态方法和非晶态属性都有一个this属性
(2)静态方法和静态属性不具备this属性
(3) 实例方法中可以访问静态属性和静态方法 , 静态方法中不可以访问实例属性和实例方法

六、访问修饰符

(1)public 任何情况都可以被访问
(2)protected 子类可访问
(3)default 同一个包内可以访问
(4)private 只能在同一个类中去访问

七、 封装

(1)封装概念:又叫隐藏实现,只是说把一些对外接口暴露,而不需要用户去了解其内部实现 。
(2) 主要分为两部分: ①属性和实现细节隐藏起来,不允许外部成员访问 ②把方法暴露出来,让方法去控制属性的访问的操作。
在这里插入图片描述

八、ArrayList

(1)动态化的数组
int[] array = new int[10]; 一旦创建大小就不能被改变
(2)String 引用数据类型
String s = “hello world”;
String s = new String(“abc”);
char[] chars = {‘a’, ‘b’, ‘c’};
String s = new String(chars);
值:字符串常量池

  • 拼接String字符串
    String s = “abc” + “def”; -> “abcdef”
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

九、String类

(1) 本身是一个对象,对象的默认值是null
(2)“hello” 遇到"“就会在内存上创建一个字符串对象
(3) 创建方式
String s = “hello”;
String s = new String(“hello”);
其首先会在堆上申请一块内存空间存储字符串常量"hello”, 然后通过
new String会创建一个对象,需要注意这里有可能创建两个对象,第一个
对象创建字符串常量hello添加到字符串常量池中,第二个对象则是创建
一个值为hello的字符串对象
(4)匹配相等
== equals
==符号比较基本数据类型比较的是值,符号比较引用数据类型比较的是地址
Object类中定义的equals方法与没有区别
String重写了equals方法使得比较的是值
(5)String常用方法
intern() 扩充常量池的一个方法
eg.String s1 = “apple”;
String s2 = new String(“apple”);
sout(s1 == s2);//false
s2 = s1.intern();//获取常量池中apple引用
sout(s1 == s2);//true
length()
charAt(int index)
getBytes()
indexOf(char)查找字符第一次初夏安的地方
substring(int startIndex)
substring(int startIndex, int endIndex)
concat()
trim() 去掉起始和结束的空格
toLowerCase()转为小写字母
toUpperCase()转为大写字母
(6)StringBuilder 和StringBuffer
String本身是不可变
String s = “abc”; “abc” + “d”
StringBuilder/StringBuffer 相比于String类更加灵活,其提供的append函数
可以实现字符串的拼接,由于String对象一旦创建,值就不可以被改变了
(7)StringBuffer类是线程安全的,这就意味着多个任务使用同一个StringBuffer,

  • 某一时刻只能够有一个任务执行。如果多任务并发访问的情况则使用StringBuffer,
  • 反之就使用StringBuilder
    (8)StringBuffer和StringBuilder存在的意义
    谈String的不变性,String类对象在字符串拼接时的缺点,StringBuilder/StringBuffer
    底层维护了一个char数组
    在这里插入图片描述
    在这里插入图片描述

继承与多态

一、继承

1)"是"的关系是继承的一个明显特征,每一个经理都是职员
2)extends关键字表示当前的类派生于一个已经存在的类。已经存在的类
称之为父类/基类,当前的类称之为子类/派生类
3)一个父类,并不是优于子类或者比子类拥有更多的功能,子类比父类功能更加丰富
4) 设计类时,一般将一些通用的功能放至父类当中,特有的功能则由子类所持有
5)子类中调用父类的普通方法/构造方法,需要通过super关键字,调用父类中的构造方法,则使用super(), 调用父类中的普通方法则使用super.xxx
6)父类中包含什么样的构造器,子类中也需要包含什么样的构造器
7) 父类私有的属性在该类之外是不可以访问的
8) Java当中的继承是单继承,一个Java类只能继承一个父类

二、重写

:表示子类中的方法名、返回值、参数列表和父类当中的方法是一模一样

三、 重载

:表示两个方法方法名相同,参数列表不同(返回值不能作为重载的衡量
标准)

四、重写和重载的区别和联系

1)重写发生在具有继承关系两个类之间的;重载既可以发生在具有继承关系的两个类之间,也可以发生于同一个类当中
2)构造方法可以构成重载,但是不可以构成重写
3)子类重写父类的方法实现叫做重写;两个方法方法名相同,参数列表不同叫做重载
4) 静态方法可以被重载但是不能被重写,重写静态方法相当于隐藏父类中的方法

五、多态

当一个类A有很多子类B,C,D时,并且子类都重写了父类中的某个方法func(),A a = new B,C,D(),
这样的对象称之为向上转型对象,通过它调用func, 不同的向上转型对象就会在调用func时表现不同
的行为,这样就称之为多态。 Employee emp = new Manager();//向上转型 emp.countSalary(); //调用Manager中的countSalary

六、多态的三要素

1)具有继承关系的两个类
2)重写
3)向上转型对象
在这里插入图片描述
有一个DataBase类用于存储数据,有一个Man类,有一个Woman类,Man和

  • Woman都有共同的属性name、age等等,有共同的一些行为eat()/drink()
  • 等等,衡量一个Man的标准和衡量一个Woman的标准是不一样的,看一个Man
  • 看他的occupation、salary、trait等等,看一个Woman看她的eye、nose、
  • mouth、figure。需要注意在DataBase中需要提供一个list方法,列出所
  • 存储对象的属性信息,不同的人群Man/Woman需要提供一个listSelf方法,
  • 列出个人的属性信息,
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

七、多态的实现原理


在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值