- 封装
为什么要封装?
封装是为了保护类中的成员变量和方法的安全性;因为如果没有对变量进行封装处理,而是直接通过对象对变量进行赋值读取操作那么就会造成变量的赋值并不符合实际逻辑但是依然能够进行赋值的现象;举个简单的例子。
首先创建一个类:
public class Person {
int age ;
String name;
public void eat(){
System.out.println("这是人的吃的方法");
}
}
创建一个测试类:
public class PersonTest {
public static void main(String[] args) {
Person person =new Person();
person.age=-10;
System.out.println("这个人的年龄为:"+person.age);
}
}
看得见测试类中是可以通过对象直接对类中的变量进行赋值和读取;而且赋值是没有限制的,但是显然年龄赋值为-10是不合理的。这个时候就需要对类中的变量进行封装,对类中的变量进行保护,让它有一个合理的值。
怎么实现封装呢?
封装是将类中的变量和方法保护起来的一种实现;即对需要保护的成员进行访问权限控制,利用访问权限符来修饰成员变量或者成员方法,并且为成员变量提供一对公开的get和set放法;外部的类如果再想调用类中的变量就需要通过这两个方法进行赋值和读取操作,在这两个方法中加入一些控制条件就可以对成员变量实现保护的功能。还是上例:
public class Person {
private int age ;
private String name;
public void eat(){
System.out.println("这是人的吃的方法");
}
public int getAge() {
return age;
}
public void setAge(int age) {
if (age<0||age>200) {
this.age =18;
}else{
this.age = age;
}
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
可以看得见类中的两个变量都用权限控制符private进行了修饰,将这两个变量进行私有化,同时创建了两个方法对这两个变量进行赋值和读取的操作,其中对年龄的赋值操作中加入了判断,如果输入的数是不合理的那么就将它直接赋值为18,如果是合理的数值就将它赋值为输入的值;这样就可以避免再出现年龄为负数的现象。
package cn.hisoft;
public class PersonTest {
public static void main(String[] args) {
Person person =new Person();
person.setAge(-10);
System.out.println("这个人的年龄为:"+person.getAge());
}
}
测试类中只能通过调用方法才能对那些被保护起来的方法进行赋值操作和读取操作,同时可以看到如果将年龄赋值为-10,输出的结果为18。
- 继承
什么是继承?
继承就是父子关系的两个类,子类继承父类。类之间只能单继承。
继承的作用是什么?
继承能够实现代码的复用,即子类继承父类是可以直接通过对象调用类中的成员,就像将父类中的代码复制到了子类中一样。这样就实现了父类代码的复用。
如何实现继承?
子类继承父类 声明类的时候需要声明继承关系,用关键字extends .
子类类名 extends 父类类名
例如定义子类Dog继承父类Animals:
public class Animals {
String name ;
String sex;
int age;
public void eat() {
System.out.println("这是Animals的吃");
}
}
public class Dog extends Animals{
}
在这个子类中可以看到Dog这个类是继承于Animals的而且这个类中什么也没有。
public class DogTest {
public static void main(String[] args) {
Dog dog=new Dog();
dog.age=5;
System.out.println(dog.age);
dog.eat();
}
}
这个测试类创建了一个Dog类的对象而且可以通过对象调用类中的变量age,那么这个age变量是哪来的呢?
显然Dog类本身里面是什么都没有的,但是他的父类Animals中是有这些变量的,虽然Dog类中什么都没有写,但是它是继承了父类中的变量和方法就像复制到了自己的类中一样,可以通过对象直接调用。可以再调用里面的吃的方法。输出的结果如下:
从这个结果可以看出Dog类是将父类中的方法和变量都继承过来了。
- 多态
什么是多态?
多态字面意思就是“多种状态”,是允许将子类类型的对象定义成父类类型的一种技术。
多态的作用是什么?
把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。
如何实现多态?
多态是通过子类重写父类的方法来实现的。
如下例:
public class DogTest {
public static void main(String[] args) {
// Dog dog=new Dog();
// dog.age=5;
// System.out.println(dog.age);
// dog.eat();
Animals dog1 = new Dog();
dog1.age=10;
System.out.println(dog1.age );
dog1.eat();
}
}
创建一个子类对象定义为父类类型。子类中将父类中的eat方法进行重写:
public class Dog extends Animals{
public void eat(){
System.out.println("这是Dog的吃");
}
public void play(){
System.out.println("这是Dog的玩");
}
}
看到子类中重新写了eat方法,而且还写了一个自己独有的方法play。
这个时候我们再去通过多态去调用eat方法,执行的结果如下:
他不是在调用父类中的eat方法而是调用了子类Dog中的eat方法,但是注意:他不能调用子类中独有的方法!!
因为这个独有的方法父类中是并没有的,所以这个方法可以理解为差异。所以多态就是将这种差异进行了屏蔽。