10 封装,继承详解,什么是封装,什么是继承。基本类型包装类,自动装箱自动拆箱等

1 封装

面向过程面向对象5大特征:封装 ,继承,多态,抽象,接口

1.1 什么是封装

封装,即隐藏对象的属性和实现细节,仅对外公开接口(方法/函数),控制在程序中属性的读和修改的访问级别;将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成“类”,其中属性数据和函数都是类的成员。​ 封装的目的:是增强安全性和简化编程,使用者不必了解具体的实现细节,而只是要通过外部接口,以特定的访问权限来使用类的成员。

1.2 Java的封装

广义来说:一切公共代码的抽取都可以叫封装。​一般体现在公共方法的封装。工具类。
狭义来说:隐藏对象的属性和实现细节。
将属性私有化 ,使用private关键字修饰。为使用private关键字修饰的属性添加 get和set方法。通过get和set方法来操作属性。setAge()设置/getAge()获取

封装方法三要素:
1方法名 ==> 英文有意义
2参数列表 ==> 目标数组
3 返回值 ==>string

public class Dog {    
String name;    
private int age;    
String sex;    
/**     
* getAge() 就是对象对外提供的获取age属性的方法    
* 
* @return    
*  */    
public int getAge() {       
 return age;   
 }    
 /**     
 * setAge()就是对外提供的方法,外界只能通过这个方法对age属性进行访问     
 * @param age     
 * */    
 public void setAge(int age) {        
 if(age>16 || age < 0){            
	 this.age = 0;       
	  }else{
	 this.age = age;        
	 }    
 }    
	 public void show(){       
	  System.out.println(name+","+age+","+sex);    
	  }
  }

通过private关键字将年龄私有化,通过提供的setAge()方法去给年龄设置值。并且在setAge()方法中设置年龄的大小范围。从而达到一个目的:既能隐藏了对象的属性,又可以隐藏实现的细节。

1.3.封装的作用

封装的作用在于保护或者防止代码(数据)被我们无意中破坏。在面向对象程序设计中数据被看作是一个中心的元素并且和使用它的函数(方法)结合的很密切,从而保护它不被其它的函数意外的修改。

1.4 封装的情形

什么情况下封装:编写实例类时,用到封装有很多好处,其中比较实际的是:
拒绝直接调用声明字段,保护内部数据,更安全;
重复调用,避免代码冗余,程序编写效率高

2 继承

2.1 什么是继承

继承是面向对象软件技术当中的一个概念,与多态、封装共为面向对象的三个基本特征。继承可以使得子类具有父类的属性和方法或者重新定义、追加属性和方法等。继承(英语:inheritance)。这种技术使得复用以前的代码非常容易,能够大大缩短开发周期,降低开发费用。继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的属性和方法,或子类从父类继承方法,使得子类具有父类相同的行为。如果某类B“继承”另某类A,就把这个B称为“A的子类或派生类(subclass)”,而把类A称为“B的父类”也可以称为“A是B的超类或基类(superclass)”。

2.2.为什么需要继承

1.提高代码的可重用性
2.起到扩展功能的作用!
没有继承时,会出现什么情况?
需求:动物园引进新品种 Dog,模拟 id age name 属性。动物园引进新的动物 Cat.同样有 id age name 属性忽然有一天,老板说id不好 要改名 aid 。两个动物很好改,如果有一万个动物,能改很麻烦,改完运行三个月后,老板又说了,还是id好,改回来!程序员们苦逼的改改改。又改完了,运行三个月后,老板又说了,还是aid好,再改回来!。。。程序员崩溃的!当时的程序员开始思考,如何解决这种问题呢? 使用继承。继承是在封装的基础上实现的!

Animalpublic class Animal{  
	int age;  
	String color;  
	int id;  
	public void eat(){    
	// 输出语句  
	}
}
Catpublic class Cat extends Animal{  
	String name;
}
Dogpublic class Dog extends Animal{  
	String name;
}

2.3 继承的格式

[权限修饰符] class 子类名 extends 父类名{}

2.4 方法的重写 @Override 注解

什么是方法重写
在Java和其他一些高级面向对象的编程语言中,子类可继承父类中的方法,而不需要重新编写相同的方法。但有时子类并不想原封不动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写。方法重写又称方法覆盖。
法重写方法重载的区别:​
重载(overload):发生在同一个类中 , 方法名相同,参数列表不同,不考虑返回值。
重写(override):发生在父子类中,子类继承父类的方法,方法名相同,参数也相同,但是实现方法体不同。
重写的注意事项
必须保证父子类中重写的方法,方法名相同,参数列表相同。子类方法的返回值必须等于父类方法的返回值范围。&子类方法的权限必须要大于等于父类方法的权限(不包括 private)。私有的不能被继承
toString()方法 任何类都是Object类的直接子类或者间接子类,在Object类中有一个toString()方法。当输出一个对象时,先调用当前类的toString()方法,如果当前类没有toString() ,就去找当前类的父类,看是否有toString()方法,如果过父类也没有,就去找Object类中的toString()方法并运行。
数据模型类
以后写类都要有:成员属性私有化,成员方法,构造方法,get/set方法 ,toString()

2.5super关键字,this关键字

作用:如果子类既想使用自己的方法,又想使用父类的成员变量和成员方法,需要通过super关键字。
super 关键字的用法:
1.在子类的成员方法中访问父类的成员变量和成员方法。
2.在子类的构造方法中访问父类的构造方法。
this关键字 就代表当前这个对象。
继承中构造方法的特点(父子类)特点

  1. 构造方法不能被继承(构造方法是一个类独有的方法)
  2. 创建子类对象一定是先调用父类构造,再调用子类构造。(并且只有子类构造才能调用父类构造)。
  3. 子类构造可以通过super关键字调用父类有参构造 无参super() 有参super(参数列表) 。
  4. super父类构造调用,必须是子类构造中的第一行语句。(并且一个子类构造,只能调用一次super())。必须先有父再有子。
    在这里插入图片描述
    继承的特点: java中类与类之间是单继承的。但是可以多级继承。一个父类可以有多个子类。
    在这里插入图片描述
    总结:java类是单继承的,但是可以多级继承一个子类只能有一个父类,但是一个父类可以有多个子类。

2.6 Object类

Object是所有类的父类,任何类都默认继承Object 理论上Object类
Object类是所有类的父类,即直接或间接的继承java.lang.Object类。由于所有的类都继承在Object类,因此省略了extends Object关键字。该类中主要有以下方法: toString(),getClass(),equals(),clone(),finalize(), 其中toString(),getClass(),equals()是其中最重要的方法。
注意:​ Object类中的getClass(),notify(),notifyAll(),wait()等方法被定义为final类型,因此不能重写。equals()方法 在比较字符串时 比较的是俩个字符串的值。但是实际上equals方法比较的是地址值。
Object类中 equals() 方法的源码:
在这里插入图片描述
补充:

  1. final对于成员变量来说,使用final 修饰照样是不可变的,但是因为成员变量有默认值,所以必须手动赋值。
  2. 对final修饰的成员变量来说,可以直接赋值,也可以通过构造方法赋值,但是必须二选一。
  3. 如果要通过构造方法赋值,并且类中有多个构造方法,必须保证每一个构造方法都要对final修饰的成员变量赋值。

3 基本类型包装类

3.1概念​

基本数据类型使用非常方便,但是我们没有对应的方法去操作它们,可以通过一个类把基本数据类型包装起来,在类中定义一些方法,这个类就叫包装类。我们可以使用包装类中定义的方法去操作基本数据。
基本数据类型:
在这里插入图片描述
在这里插入图片描述

3.2 自动装箱与自动拆箱

装箱:
基本数据类型转换成包装类
拆箱:
包装类转换成基本数据类型

3.3 基本数据类型与字符串之间的转换

基本类型(数字)---->字符串(String)
可以使用数字直接+空字符串

例如: String a = 5 + “”;

使用Integer包装类的方法 toString(int i);

例如: String a = Integer.toString(100);

使用String类的方法valueOf(int i)

例如:String a = String.valueOf(100);

字符串---->基本数据类型(数字)
注意:只有数字类型的字符串,才可以转换成数字

使用包装类的方法xxx.parseXXX(“5sdc”); NumberFormatException 数字格式异常

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

杵意

谢谢金主打赏呀!!

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

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

打赏作者

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

抵扣说明:

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

余额充值