Java面向对象三大特性
日期 :2022年4月21日 13:03:46
主题 :Java面向对象三大特性
作者 :Nac Jackson
一、封装
封装是什么?
尽可能的隐藏对象内部的实现细节,控制对象的修改及访问权限(通过修饰符实现)
封装重要吗?
答案是肯定重要,在对象外部对相应属性赋值可能会存在非法数据录入,存在安全隐患。此前我们写的代码都是没有进行封装的,也没有对其赋值进行控制。所以实现属性的封装是有非常重要的。
对象的封装通过访问修饰符来完成的,所以对应的访问修饰符具有对数据访问拥有不同的权限
访问对象内部数据是通过get/set方法实现的
public class demo_5 {
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
private String name;
private String age;
public demo_5(String name, String age) {
this.name = name;
this.age = age;
}
}
二、继承
继承是什么?
字面意思理解就是儿子获得了父亲的财产,在Java中的继承也是差不多的
继承的规律:
- 功能越精细,重合点越多,越接近父类。
- 功能越粗略,重合点越少,越接近Object类
class Person{
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
private String name;
private String age;
public Person(String name, String age) {
this.name = name;
this.age = age;
}
}
class Boy extends Person
{
public Boy(String name, String age) {
super(name, age);
}
}
继承的特点:
- 语法:class子类extends父类//定义子类时,显示继承父类
- 应用:产生继承关系后,子类可以使用父类中的属性和方法,也可以定义子类独有的方法
- 好处:提高了代码的重用性、可扩展性
注意:
- 构造方法不可以继承,private修饰的属性和方法不可继承,父子类不在同一个包内时,default修饰的属性和方法不可继承
三、访问修饰符
| 自身类 | 包内 | 非包内 | 其他 |
---|
private | √ | × | × | × | default | √ | √ | × | × | protected | √ | √ | √ | × | public | √ | √ | √ | √ |
四、方法重写
什么是重写?
当一个父类的方法无法满足到实际的使用需求时,可以再子类中定义一个相同的方法进行覆盖,也称为重写(重新写一次对应的方法)
重写(Override)
- 规则:
- 方法名、参数列表、返回值类型相同
- 访问修饰符可以与父类相同或者是比父类更加宽泛
super关键字
- 第一种:子类中使用
super 的形式访问父类的属性和方法
public Boy(String name, String age) {
super.getName();
super.name="Tom";
}
public Boy(String name, String age) {
super(name, age);
}
五、多态
什么是多态?
父类引用指向子类对象,从而产生多种形态
二者间有直接或者是间接继承关系时,父类引用可指向子类对象,即形成多态
父类应用之间仅可调用父类声明方法和属性,不可调用子类独有的属性和方法
多态的作用?
六、装箱拆箱
向上转型(装箱):
class demo {
public static void main(String[] argd){
Person person = new Girl();
person.person();
}
}
class Person{
public void person(){
System.out.print("This is a person.");
}
}
class Girl extends Person {
public void person (){
System.out.print("This is a Girl.");
}
}
向下转型(拆箱):
public class demo_5 {
public static void main(String[] args) {
Person person = new Boy("Bittur","fly");
Person Girl = person;
System.out.println(Girl.toString());
}
}
class Person{
protected String name;
protected String age;
public Person() {
}
public Person(String name, String age) {
this.name = name;
this.age = age;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age='" + age + '\'' +
'}';
}
}
class Boy extends Person {
public String getVoice() {
return voice;
}
public void setVoice(String voice) {
this.voice = voice;
}
public String getCharacter() {
return character;
}
public void setCharacter(String character) {
this.character = character;
}
public Boy(String voice, String character) {
this.voice = voice;
this.character = character;
}
public Boy(String name, String age, String voice, String character) {
super(name, age);
this.voice = voice;
this.character = character;
}
@Override
public String toString() {
return "Boy{" +
"name='" + name + '\'' +
", age='" + age + '\'' +
", voice='" + voice + '\'' +
", character='" + character + '\'' +
'}';
}
private String voice;
private String character;
}
class Girl extends Person{
public String getVoice() {
return voice;
}
public void setVoice(String voice) {
this.voice = voice;
}
public String getCharacter() {
return character;
}
public void setCharacter(String character) {
this.character = character;
}
public Girl(String voice, String character) {
this.voice = voice;
this.character = character;
}
public Girl(String name, String age, String voice, String character) {
super(name, age);
this.voice = voice;
this.character = character;
}
@Override
public String toString() {
return "Boy{" +
"name='" + name + '\'' +
", age='" + age + '\'' +
", voice='" + voice + '\'' +
", character='" + character + '\'' +
'}';
}
private String voice;
private String character;
}
|