Java面向对象之封装、继承


前言

 今天继续Java面向对象的学习,学习如何将一个类进行封装,为什么要将类封装?继承是什么,有何规则?
 希望能对你的学习有所帮助!


提示:以下是本篇文章正文内容,Java系列学习将会持续更新

一、封装

(1)基本概念

  通常情况下在测试类中可以给成员变量赋值一些合法但不合理的数值,而程序的执行过程无法检测和提示,和我们的现实有点不符合。
  为了避免上述情况的发生,就需要对成员变量的赋值操作进行合理性的判断和提示,该方式就叫做封装,通俗的来说,封装就是一种保证我们成员变量值合理的机制。
  优点:可以使类中数据免受篡改、使类容易维护和调试。

(2)封装流程

 ①私有化成员变量,使用private关键字修饰;
 ②设置公开的get成员变量()的访问器和set成员变量(数据类型 成员变量)的修改器,在方法体中进行合理的判断。
 ③在构造方法体中调用set修改器进行合理判断

(3)案例:封装Person类

public class Person {
	//特征有:姓名、年龄以及国籍
	//定义私有数据域
	private String name;
	private int age;
	private String nationality;
	
	//无参构造
	public Person() {
	}
	//有参构造
	public Person(String name,int age,String nationality) {
		setName(name);
		setAge(age);
		setNationality(nationality);
	}
	
	//提供一个打印特征的方法
	public void show() {
		System.out.println("姓名:" + name + ", 年龄:" + age + ", 国籍:" + nationality);
	}
	
	//访问器,让外界可以访问到该类中的私有数据域
	public String getName() {
		return name;
	}
	public int getAge() {
		return age;
	}
	public String getNationality() {
		return nationality;
	}
	
	//修改器,让外界可以修改该类中的私有数据域
	public void setName(String name) {
		this.name = name;
	}
	public void setAge(int age) {
		//判断用户输入的age是否合法
		if(age > 0 && age < 120){
			this.age = age;
		}else{
			System.err.println("input age illegal!");
		}
	}
	public void setNationality(String nationality) {
		this.nationality = nationality;
	}
}

回到目录…

二、继承

人类:
  特性:姓名、年龄
  行为:吃饭、娱乐
学生类:
  特征:学号
  行为:学习
教师类:
  特征:薪水
  行为:讲课

(1)基本概念

  当多个类之间有相同的特征和行为的时候,就可以将相同的内容提取出来组成一个父类,让子类继承父类就可以了,从而实现子类吸收父类中成员的效果,此时在子类中只需要编写自己独有的成员即可。
  换一句话来说,继承就是一种用于提高代码复用性、可维护性以及可扩展性的机制。
  在Java语言中使用extends关键字来代表继承的关系。
比如:
  class Student extends Person{ } //表示Student类继承自Person类
其中Person 类叫做超类/父类/基类,Student类叫做子类/孩子类/派生类

(2)注意事项

  1.子类可以继承父类中的成员变量,包括私有的成员变量,但不能直接访问;子类不可以继承父类中的构造方法(可以调用)、私有的成员方法、静态方法。

  2.构造子类对象时候会自动调用父类中的无参构造方法,用于初始化从父类中继承下来的成员变量信息,相当于在子类构造方法中的第一行增加代码:super();

  3.在java中只支持单继承,也就是一个子类只能有一个父类,但一个父类可以有多个子类;

  4.只有满足:子类 is a 父类的逻辑关系才能用继承,不能滥用继承;

(3)案例:创建Student类继承Person类

public class Student extends Person {
	private int id;
	
	public Student() {
		super();//表示调用父类中的无参构造方法,编译器会自动添加该代码,所以可省略
	}
	
	public Student(String name,int age,String nationality,int id) {
		/**
		 * setName(name);
		 * setAge(age);
		 * setNationality(nationality);
		 */
		super(name,age,nationality);//调用父类中的有参构造方法
		setId(id);
	}
	
	//标记:用于告诉编译器下面的方法是对继承父类方法的重写
	@Override
	public void show() {
		super.show(); //调用父类中的show()方法
		System.out.println("学生学号是:"+id);
	}
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
}

回到目录…


总结

提示:这里对文章进行总结:
以上就是今天的学习内容,本文是j继续Java面向对象的学习,学习了面向对象的两大特征:封装和继承。之后的学习内容将持续更新!!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

一只咸鱼。。

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值