首先,封装
开宗明义,概念先行
最最最经典的一句话:
万物皆对象
而面向对象,则是将对象从两个不同的方面去刻画(以小明同学为例):
1.描述事物的属性(静态的特征)
eg.小明的年龄,身高,体重等等
2.事物的行为(动态的特征)
eg.参加考试,吃早饭,跑步,获得奖项等等
然后是:类
"类"代表着许多拥有相同对象的集合
eg.水果类:香蕉,西瓜,葡萄,百香果等等
封装是将类的成员变量或成员方法隐藏起来,通过权限访问修饰符(private,public,protected等)进行限制。总的来说,封装是一种信息隐藏技术。 作用有四:
1.隐藏类的内部实现细节,使外部代码无法直接访问和修改类的内部数据。
2.将类的内部状态和行为进行封装,使得外部代码只能通过类提供的公有接口(也称为类的方法)进行间接访问和操作。
3.提高类的安全性和可维护性,避免由于外部代码直接访问和修改导致的数据安全和稳定性问题。
4.实现代码的重用性,通过将数据和对数据的操作封装在一起,可以防止不同对象之间因数据不一致而产生的冲突。
通过一个属性来感受一下:
public
int age;
}
public static void main(String[] args){
A a = new A();
a.age = 500;
}
在这里设置一个A类,有一个年龄属性,但是在主函数里面给年龄设置值的时候,可以胡乱的设置一个值,几百几千的违背常理的设置都不会报错,这个时候就可以使用封装了。
arduino
public class A{
private int age;
//提供一个返回年龄的方法
public int getAge(){
return age;
}
//提供一个处理年龄误差的方法
public void setAge(int age){
if(age<80){
age=18;
}else{
this.age = age;
}
}
}
public static void main(String[] args){
A a = new A;
a.getAge(81);
system.uot.println(a.setAge);
上面的代码,对于age属性来说,我加了private。这样外界对它的访问就受到了限制,现在我还想加上其他的限制条件,但是在属性本身上没有办法再加了,所以我们通过定义方法来进行条件的添加。
以属性为案例,进行封装:
1、将属性私有化,被private修饰,加入权限修饰符;2、提供public修饰的方法让别人来访问使用;
3、即使外界可以通过方法来访问属性了,但是也不能随意访问,因为可以在方法中加入限制条件;
4、设置getter、setter方法,给别人提供访问的路径,idea快捷键:alt+insert键快速生成。
idea中完整空参JavaBean快捷键:
1.alt+instert选择constructor 按两下tab一下回车(取消name.string,选择select none)
- alt+ins选择constructor按Ctrl+a(全选)按回车(即确认OK)
3.alt+ins选择getter and setter 按Ctrl+a(全选)按回车
其次,继承
子类继承父类,子类包括多个对象.
继承关键词:extends
1.什么是继承、继承的好处?
继承是面向对象三大特征之一,可以让类跟类之间产生子父的关系。 可以把多个子类中重复的代码抽取到父类中,子类可以直接使用,减少代码冗余,提高代码的复用性
2.继承的格式? public class 子类 extends 父类{}
3. 继承后子类的特点? 子类可以得到父类的属性和行为,子类可以使用(super调用)。 子类可以在父类的基础上新增其他功能,子类更强大。
关键字 | 访问成员变量 | 访问成员方法 | 访问构造方法 |
---|---|---|---|
this | this.成员变量 | this.成员方法(...) | this(...) |
super | super.成员变量 | super.成员方法(...) | super(...) |
this、super使用总结:
this:理解为一个变量,表示当前方法调用者的地址值;
super:代表父类存储空间。
最后,多态
一、多态的定义 多态是面向对象编程中的一个重要概念,它指的是同一个对象在不同情况下具有不同的表现形式和功能。在Java中,多态是指同一个类型的对象,在不同的情况下可以表现出不同的行为。
二、使用多态的前提条件 (使用条件)
1.必须在继承体系下,子类必须继承父类
2.子类必须要对父类中方法进行重写
3.通过父类的引用调用重写的方法 (对于重写不在此处介绍)
使用方法:
父类类型 对象名称 = 子类对象;
代码示例:
class
public void sound() {
System.out.println("The animal makes a sound");
}
}
class Cat extends Animal {
public void sound() {
System.out.println("The cat meows");
}
}
class Dog extends Animal {
public void sound() {
System.out.println("The dog barks");
}
}
public class Main {
public static void main(String[] args) {
Animal myAnimal = new Animal();
Animal myCat = new Cat();
Animal myDog = new Dog();
myAnimal.sound();
myCat.sound();
myDog.sound();
}
}
在这个例子中,Animal是一个父类,而Cat和Dog是它的子类。在main方法中,我们创建了一个Animal对象,一个Cat对象和一个Dog对象。然后,我们通过调用它们的sound方法来展示不同的行为。由于myCat和myDog是Animal类型的引用,但是它们指向的是Cat和Dog对象,因此在调用sound方法时会表现出不同的行为,这就是多态的体现。
其中
调用成员变量 编译看左,运行看左 调用成员方法 编译看左,运行看右
用来判断可不可以强转:(向下转型,即父类转子类) instanceof(是不是)
抽象类与方法
如果在父类中,不知道子类将要进行什么操作,则可以使用抽象类(没有被实现的方法)
抽象方法 public abstract 返回值类型 方法名(参数列表);
抽象类 public abstract class 类名{}
注意:
1.抽象类不能new
2.抽象类不一定有抽象方法,有抽象方法的一定是抽象类
3.可以有构造方法
4.抽象类的子类
要么重写抽象类中的所有抽象方法 要么是抽象类
这周大概就这么多啦~~~