面向对象三大特征:封装、继承、多态

 一、封装 

1. 封装:将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问

2. 为什么要封装?属性随意访问可能会造成不合理的赋值,封装可以对属性值的合法性作出判断

封装的好处:

  • 便于使用者正确使用系统,防止错误修改属性
  • 有助于系统之间的松耦合,提高系统独立性
  • 提高软件的可重用性
  • 降低了构建大型系统的风险

3. 访问权限控制:

(1) 类的访问修饰符:public修饰符(公有访问级别),默认修饰符(包私有访问级别)

(2) 类成员的访问修饰符:public(公开),protected(受保护的),默认修饰符,private(私有)

二、继承(关键字:extends

当多个类的属性和方法有大量重合部分时,我们通常把代码重合部分抽取到一个新的类中,再让这些类继承这一个类,从而达到简化代码、方便修改、提升效率的目的。被继承的类称为父类,继承父类的类称为子类。子类可以直接调用父类的属性和非构造方法(public、protected),也可以编写自己独有的属性和方法,还可以重写父类的方法。继承是Java中实现代码重用的重要手段之一。Java中只支持单根继承,即一个类只能有一个直接父类。

super 访问父类及祖先类非私有的方法和属性:

  1. 访问属性:super.属性名
  2. 访问一般方法:super.方法名()
  3. 访问无参构造方法:super()
  4. 访问有参构造方法:super(参数)

(注意:super 访问父类构造方法必须放在构造方法中的第一行!)

1. 方法的重写

子类可以根据自身的需求,对从父类继承来的方法进行重新编写,称为方法重写或覆盖(overriding)。重写时,可以通过 super 保留父类的方法内容,构造方法不能被重写

方法重写的规则:

  • 方法名相同
  • 参数列表相同
  • 返回值类型相同或者是其子类
  • 访问权限不能严于父类
  • 父类的静态方法不能被子类覆盖为非静态方法,父类的非静态方法不能被子类覆盖为静态方法
  • 子类可以定义与父类同名的静态方法,以便在子类中隐藏父类的静态方法(注:静态方法中无法使用super)
  • 父类的私有方法不能被子类覆盖
  • 不能抛出比父类方法更多的异常

方法重写的简单示例:

//创建宠物类

public class Pet {

    //私有属性
	private String name;
	private int health;
	private int love;

	//get、set方法
	public String getName() {return name;}
	public void setName(String name) {this.name = name;}
	public int getHealth() {return health;}
	public void setHealth(int health) {this.health = health;}
	public int getLove() {return love;}
	public void setLove(int love) {this.love = love;}
	
    //无参构造
	public Pet() {}
	
    //有参构造
	public Pet(String name,int health,int love) {
		setName(name);
		setHealth(health);
		setLove(love);
	}
	
    // print() 方法
	public void print() {
		System.out.print("大家好,我叫"+this.name+",健康值:"+this.health+",亲密度:"+this.love);
	}
	
}
//创建小狗类,继承宠物类并重写 print() 方法

public class Dog extends Pet {

    //私有属性及其get、set方法
	private String strain;
	public String getStrain() {return strain;}
	public void setStrain(String strain) {this.strain = strain;}
	
    //无参构造
	public Dog() {}
	
    //显式调用父类有参构造的有参构造
	public Dog(String name,int health,int love,String strain) {
		super(name, health, love);   //调用父类有参构造
		setStrain(strain);
	}
	
    //不继承父类代码内容的方法重写,完全覆盖掉父类中该方法的内容
	public void print() {
		System.out.println("大家好,我叫"+this.name+",健康值:"+this.health+",亲密度:"+this.love+",品种是:"+this.strain);
	}
	
}
//创建企鹅类,继承宠物类并重写 print() 方法

public class Penguin extends Pet {

    //私有属性及其get、set方法
	private String sex;
	public String getSex() {return sex;}
	public void setSex(String sex) {this.sex =
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值