一、封装
1.1、什么是封装
封装,即隐藏**对象**的**属性和实现细节**,仅对外公开**接口**(方法/函数),控制在程序中**属性的读和修改**的**访问级别**;将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的[源代码](https://baike.baidu.com/item/源代码/3814213)进行有机的结合,形成“类”,其中属性数据和函数都是类的成员。
封装的目的:是增强安全性和简化编程,**使用者**不必了解具体的实现细节,而只是要通过外部[接口](https://baike.baidu.com/item/接口),以特定的访问权限来使用类的成员。
**广义来说:**一切公共代码的抽取都可以叫封装。
一般体现在公共方法的封装。工具类。
狭义来说:隐藏对象的属性和实现细节。
-
将属性私有化 ,使用private关键字修饰。
-
为使用private关键字修饰的属性添加 get和set方法。通过get和set方法来操作属性。
setAge()设置/getAge()获取
public class KongTiao {
//private 私有,如果一个属性定义成私有的,那么外部就不能使用了 只能类使用
//成员变量 私有化了
private int wendu;
//get 方法取值
public int getWendu() {
return wendu;
}
//set 方法赋值
public void setWendu(int wendu) {
if(wendu>31)wendu=31;
if (wendu<60)wendu=60;
this.wendu = wendu;
}
}
public static void main(String[] args) {
//封装 继承
KongTiao kongTiao=new KongTiao();//调用一个私有的方法
kongTiao.setWendu(-100);//直接通过set赋值
System.out.println(kongTiao.getWendu());
}
通过private关键字将温度私有化,通过set方法去给温度设置,并在set方法里面设置范围为31~60.既能隐藏了对象的属性,又可以隐藏实现的细节。
1.2、封装的作用
提高城乡的可复用性和可维护性 ,保护私有数据
二、继承
2.1、什么是继承
继承是面向对象软件技术当中的一个概念,与多态、封装共为面向对象的三个基本特征。继承可以使得子类具有父类的属性和方法或者重新定义、追加属性和方法等。
继承(英语:inheritance)。这种技术使得复用以前的代码非常容易,能够大大缩短开发周期,降低开发费用。
2.2、继承的作用
提高代码可重用性 起到扩展功能的作用
减少代码冗余
书写一个父类,子类可以对父类进行扩展
子类可以对父类重新定义
2.3、继承的方法格式
java语言是单继承的
[权限修饰符] class 子类名 extends 父类名{
}
继承关键字extends
public protected 同包默认的属性和方法 private 不能继承
private 的属性可以通过set和get来取值赋值
2.4、方法的重写
在Java和其他一些高级面向对象的编程语言中,子类可继承父类中的方法,而不需要重新编写相同的方法。但有时子类并不想原封不动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写。方法重写又称方法覆盖。
重载(overload):发生在同一个类中 , 方法名相同,参数列表不同,不考虑返回值。
重写(override):发生在父子类中,子类继承父类的方法,方法名相同,参数也相同,但是实现方法体不同。
注意
- 必须保证父子类中重写的方法,方法名相同,参数列表相同。
- 子类方法的返回值必须等于父类方法的返回值范围。&
- 子类方法的权限必须要大于等于父类方法的权限(不包括 private)。
- 私有的不能被继承
- 构造方法不能直接继承,但是子类的构造方法中必须调用父类的构造方法,如果不写就调用无参构造
- 调用的时候必须是代码体第一句代码块
toString()方法
Object类 是所有类的基类
任何类都是Object类的直接子类或者间接子类,在Object类中有一个toString()方法。当输出一个对象时,
先调用当前类的toString()方法,如果当前类没有toString() ,就去找当前类的父类,看是否有toString()方法,如果过父类也没有,就去找Object类中的toString()方法并运行。
public class Person {
//父类
private String name;
private int age;
protected String sex;//protected 这个变量在一个包里都能调用
private String address;
public Person(){
System.out.println("无参构造函数");
}
public Person (String name,int age){
System.out.println("由此观之");
this.name=name;
this.age=age;
}
public String getName() {
return name;
}
}
public class Kong extends Person{
//子类
//this 当前--调用当前对象的 如果没有会调用父类的
//super父类 直接调用父类的
String sushe;
public void sd(){
//方法覆盖
System.out.println("sadfsadf");
}
void ssd(){
super.sd();
}
public Kong(){
System.out.println("kong");
//super();//调用父类无参构造函数
}
public Kong (String name,int age){
super(name,age);
this.sushe=sushe;
}
}
public static void main(String[] args) {
Kong stu =new Kong("zs",45);//调用有参
System.out.println(stu.getName());
//Person stu1=new Person();
Kong stu2=new Kong();//调用无参构造函数
}
2.5、super关键字和this关键字
作用:如果子类既想使用自己的方法,又想使用父类的成员变量和成员方法,需要通过super关键字。
super:
在子类中的成员方法直接访问父类的成员变量和成员方法
在子类的构造方法中直接访问父类的构造方法
this: this就表示当前这个对象;当前的这个
2.6、继承中的构造方法
特点:
构造方法不能被继承(是一个类独有的)
创建的子类对象一定是先调用父类构造在调用子类构造
子类通过super关键字调用父类的有参构造, 无参super() 有参super(参数列表) 。
super父类构造调用,必须是子类构造中的第一行语句。(并且一个子类构造,只能调用一次super())。必须先有父再有子。
public Kong(){
//System.out.println("kong");
super();//调用父类无参构造函数 必须第一行
}
继承的特点: java中类与类之间是单继承的。但是可以多级继承。一个父类可以有多个子类。
一个子类只能有一个父类 但是一个父类可以有多个子类
2.7、Object类
Object是所有类的父类,任何类都默认继承Object
理论上Object类是所有类的父类,即直接或间接的继承java.lang.Object类。由于所有的类都继承在Object类,因此省略了extends Object关键字。
equals()方法 在比较字符串时 比较的是俩个字符串的值。但是实际上equals方法比较的是地址值。
Object类中 equals() 方法的源码:
为什么String就可以用equals()比较值呢?
因为String类中重写了equals()方法,所以可以比较值。
三、final关键字
3.1final作用
四、基本类型和包装类
4.1、概念
基本数据类型使用非常方便,但是我们没有对应的方法去操作它们,可以通过一个类把基本数据类型包装起来,在类中定义一些方法,这个类就叫包装类。我们可以使用包装类中定义的方法去操作基本数据。
基本数据类型:byte Byte short Short int Integer long Long float Float 等
4.2、自动装箱和拆箱
既然有了基本类型和包装类型,肯定有些时候要在它们之间进行转换。把基本类型转换成包装类型的过程叫做装箱(boxing)。反之,把包装类型转换成基本类型的过程叫做拆箱(unboxing)。
4.3基本数据类型和字符串的转换
区别
包装类型可以为 null,而基本类型不可以
包装类型可用于泛型,而基本类型不可以
基本类型比包装类型更高效
两个包装类型的值可以相同,但却不相等
总结
继承:
关键字extends
单继承 一个类只能有一个父类
子类可以继承父类:public protected 同包默认的属性和方法,不能继承private私有方法
子类可以书写自己的属性和方法
子类可以重写父类的方法
在子类中可以通过super调用父类的方法和属性。super.方法名/属性名
父类构造不能继承,但是必须调用
new子类的时候,子类构造的第一行必须调用父类的构造方法
如果子类不写super(),系统默认调用父类无参构造
.可以通过super(参数)调用有参,并且必须第一行,并且只能有一个super()。
如果通过子类调用方法,优先调用自己的方法。子类重写方法之后调用自己的方法,如果子类没有重写方法则使用父类的方法。
所有类都直接或者间接的继承了Object类。Object是所有类的基类,超类。