封装、继承、多态

1.封装

封装就是将一些数据隐藏起来,禁止直接访问一个对象中的某些数据,转而通过操作接口(get/set)来访问。

属性私有,get/set

举例说明:

public calss Student{
    //将这些学生属性设置为私有,禁止对这些属性的直接访问
    private String name;//学生姓名
    private int age;//年龄
    
    //用来操作私有属性的方法
    public String getName(){	//获取对象姓名
        return this.name;
    }
    public void setName(String name){	//设置对象姓名
        this.name = name;
    }
    
    public int getAge(){		//获取对象年龄
    	return this.age;    
    }
    public void setAge(int age){		//设置对象年龄
        this.age = age;
    }
}
Student stu1 = new Student();
/*
将属性设置为私有之后,将不能在通过stu1.name/stu1.age的形式对属性进行访问
如果需要获取/设置属性数据,可以通过以下方式:
*/
stu1.setName("小明");//设置stu1姓名为小明
stu1.setAge(25);//设置stu1年龄为25
String strTmp1 = stu1.getName();//获取stu1的姓名
int intTmp1 = stu1.getAge();//获取stu1的年龄

封装了数据有什么用?

  1. 使程序更加安全,能够保护数据
  2. 隐藏了代码的实现细节
  3. 统一接口的使用模式
  4. 更加容易对系统进行维护

用get/set来操作数据可以对数据进行约束和控制

例如:

//在这里可以对属性的设置进行约束,防止一些不合法的设置
public void setAge(int age){		//设置对象年龄
    if(age >= 0 || age < 150)	//合理的年龄输入则成功记录
        this.age = age;
    else						//不合理的输入则排除
        this.age = 0;
}

2.继承

继承是某些类的共同特征的抽象,从而可以实现现实中建模的更优解。

具有继承关系的类和类可以分为子类(派生类)父类(基类)

关键字extends(扩展):子类是父类的扩展。并且子类的范畴一定小于(包含于)父类之中。

举例说明:

//Person类作为父类,Student类和Teacher类作为子类,Student和Teacher都属于Person。
public class Person{
    //不管是老师还是学生,都有姓名和年龄的属性
    private String name;
    private int age;
    
    public String getName(){	//获取对象姓名
        return this.name;
    }
    public void setName(String name){	//设置对象姓名
        this.name = name;
    }
    
    public int getAge(){		//获取对象年龄
    	return this.age;    
    }
    public void setAge(int age){		//设置对象年龄
        this.age = age;
    }
    
    public void move(){
        System.out.println(this.name + "进行了移动!");
    }
}
//子类 - Student类
public class Student extends Person{
    
}
//子类 - Teacher类
public class Teacher extends Person{
    
}

现在即使两个子类并没有编写内容,但在如下代码调用的时候,仍然可以使用其父类中的方法,这就是继承!

(需要注意:父类中私有的内容无法被继承)

public static void main(String[] args) {
	//这里创建的是student类,但使用的方法却是在Person类中实现的
    Student stu1 = new Student();
    stu1.setName("小明");
    stu1.setAge(25);

    //这里调用了其父类的方法,并且调用成功,输出了“小明进行了移动!”
    stu1.move();
}

3.多态

同一个方法可以根据发送对象的不同而采用多种不同的行为方式

一个对象的实际类型是确定的,但是可以指向对象的引用的类型有很多

理解方式:

按下键盘的q

  • 在游戏中会释放一个技能

  • 在某系统中会实现退出功能

  • 在文本框会写下一个“q”字母

同样是按下了q键,但却有着多种不同的表现形式

多态的存在条件:

  1. 存在继承关系
  2. 子类重写了父类的方法
  3. 父类引用指向子类对象

需要注意:多态是方法的多态,属性不存在多态性

举例说明:

//父类
public class Person {
    public void testOne(){
        System.out.println("Person类测试!");
    }
}
//子类
public class Student extends Person{
    public void testOne(){
        System.out.println("Student类测试!");
    }
    public void testTwo(){
        System.out.println("Student类测试!!");
    }
}

其中,子类对父类的testOne();方法进行了重写,没有对testTwo();进行重写。

public static void main(String[] args) {
        //一个对象的实际类型时确定的,stu1/stu2都是Student类型
        Person stu1 = new Student();//父类的引用指向子类的类型
        Student stu2 = new Student();

        stu1.testOne();//由于子类重写了父类的方法,所以该处会执行子类的方法
        stu2.testOne();

        //stu1.testTwo();//该行报错
        stu2.testTwo();
    }

多态测试

结果表明,在实际的调用中

由于testOne();进行了重写,stu1stu2都会调用到子类中的方法,

而由于testTwo();没有重写,Person中并没有该方法,所以stu1.testTwo();会报错

多态有什么优点?

  1. 消除类型之间的耦合关系
  2. 可替换性
  3. 可扩充性
  4. 接口性
  5. 灵活性
  6. 简化性
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
封装继承和多是面向对象编程中的三个重要概念。 封装是指将数据和对数据的操作封装在一个类中,通过访问修饰符来控制对数据的访问权限。这样可以隐藏内部实现细节,提高代码的安全性和可维护性。\[2\] 继承是指一个类可以继承另一个类的属性和方法。通过继承,子类可以重用父类的代码,并且可以在子类中添加新的属性和方法。这样可以提高代码的复用性和可扩展性。\[2\] 多是指同一个方法在不同的对象上可以有不同的行为。通过多,可以实现方法的重写和重载,使得程序可以根据对象的实际类型来调用相应的方法。这样可以提高代码的灵活性和可扩展性。\[1\] 总结起来,封装继承和多是面向对象编程的三个基本特性,它们可以使代码更加模块化、可维护和可扩展。 #### 引用[.reference_title] - *1* *2* [封装继承、多](https://blog.csdn.net/yahid/article/details/125665027)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [C++ 类的封装继承](https://blog.csdn.net/secondtonone1/article/details/124485035)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值