Java面向对象的学习总结2.0

封装

定义和原理

Java的三大特点之封装:封装又称数据的封装,因为Java是面向对象的语言,需要对一些私密的数据进行隐藏。就像在银行取钱一样,每个用户不可能去操控别人的账号,你只能操控你自己有的账户,而且对于ATM机取钱的一些业务,你只知道结果,不知道机器是如何运行。这样就把程序功能性的代码封装起来,外部人看不到也不知道。只能去通过操作相应的接口来访问(信息隐藏)。
原理“该露的露,该藏的藏”。 写程序设计追求“高内聚,低耦合”。高内聚就是类的内部数据操作细节自己完成,不允许外部干涉。低耦合:仅暴露少量的方法给外部使用。电视大家都看过吧,可是有多少人对电视内部的是如何运行执行功能的!我们可以使用的是那一个遥控板上面给的按键,来对电视里面的能行进行操控。
注意:属性私有getter/setter
代码展示在这里插入图片描述
这里可以看出当我们对private修饰的变量的name调用时,即使在Application类中使用了new关键字还是会报“The field Student name is not visible(Student name该字段不可见)”的错误提示。面对这种情况Java语言提供一些可以操作这个私有属性的方法!提供一些public的get、set方法。
在这里插入图片描述
通过 get 获得这个数据和set 给这个数据设置值。这样我就可以调用getName()和setName()。在这里插入图片描述
注意:①public void setName(String name) { this.name = name; }
是形参方法,在使用的时候需要传实际参数.
public String getName() { return name; }
是有返回值的String 方法。

继承

继承的本质:对某一批类的抽象,从而实现对现实世界更好的建模。
程序员是”建模师“,但是哈,不可以“建模”需要走出网络,走出房门,走向户外运动运动。哈哈哈……

extands

** extands **:”扩展“的意思。子类是父类的扩展,从意义上讲是 ”is a“ 的关系。比如学生是人、老师是人,而人类具有sleep()和eat()等方法,所以老师和学生也有sleep()和eat()等方法的行为。
注意:Java中类只有单继承,没有多继承。一个子类只有一个父类,而一个父类可以有多个子类。
代码展示在这里插入图片描述
我们在Person类中写了sleep()和eat()方法,由于

public class Student extends Person {
		
}

所以即使在Student类里面什么都不写,在Application类中依旧可以调用sleep()和eat()。

public class Application {
	public static void main(String[] args) {
		Student student = new Student();
		student.say();	
		student.eat();
		}
}

object

在Java中所以的类都直接或间接继承object类。即使Person类里面什么都不写,在Application类里面new 一个Person还是得调用出来一些方法。这些方法是Java里面原本就存在的。在后面会再学习到。
在这里插入图片描述

super

super和this的区别:super代表父类,this代表当前的。
代码展示
**在这里插入图片描述**
代码里父类中

public class Person {
	protected String name = "徐小磊";
}

子类中

public class Student extends Person {
	private String name = "徐磊";
	
	public void print(String name) {
		System.out.println(name);  // Mr.xu
		System.out.println(this.name);		//徐磊
		System.out.println(super.name);		//徐小磊
	}
}

测试类中

public class Application {
	public static void main(String[] args) {
		Student student  = new Student();
		student.print("Mr.xu");
	}
}

打印的结果
在这里插入图片描述
这里我们可以看到this和super的区别。this是调用本类中的变量,super是调用父类的变量,此外super还可以调用父类的构造器必须要在子类方法的 。

重写

(Override)重写 :都是方法的重写,和属性无关。子类重写了父类的方法
代码展示
在这里插入图片描述
在继承的关系下,我new了两个对象。

	public static void main(String[] args) {
		A a = new A();
		a.print();
		//父类的引用指向了子类
		B b = new A();
		b.print();
	}

但是有什么不一样的嗯?
下面代码中的new的就很正常

	A a = new A();
	a.print();

可是在下面代码中 却 new的是A();
指向A类

	B b = new A();
	b.print();
}

可是运行的结果却是
在这里插入图片描述
这个和之前了解的new对象的创建有点不太

public static void print() {
		System.out.println("A-->print()");
	}
	public static void print() {
			System.out.println("B-->print()");
		}

区别在于在写方法的时候使用了static的静态方法:方法的调用只和左边指向的定义数据类型有关。如果不适用static的静态方法呢?又会是这样的结果?思考一下!!!
展示

public  void print() {
		System.out.println("A-->print()");
	}
	public  void print() {
			System.out.println("B-->print()");
		}

果然运行结果也变了在这里插入图片描述
因此可以看出,静态的方法和非静态方法区别很大,所以在非静态的方法下适用方法重写。

总结

封装:
1、提高了程序的安全性,保护数据。
2、隐藏代码的实现细节
3、统一接口
4、系统可维护增强了
继承
1,Java中类只有单继承,没有多继承。
2、关于super的注意点:
①super调用父类的构造方法,必须在子类构造方法的第一个
②:super只能出现在子类的方法或者构造方法中!
③:super和this 不可以同时调用方法!
重写:需要有继承关系,子类重写父类的方法!
1、方法名必须相同
2、参数列表必须相同
3、修饰符:范围可以扩大但是不可以缩小。public>protected>Default>private
4、子类和父类的方法必须一致,方法体不同!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值