java中面向对象的三大特性
封装性
继承性
多态性
一、封装
1.概念
Java里面所谓的封装就是隐藏对象的属性以及实现细节,外部只有访问的权限。增加了代码的保密性。
2.优点
将不需要对外部提供的属性隐藏起来,提高了代码的保密性,安全性。
3.实现形式
给属性加上 pritvate 修饰符,同时需要提供相应的set、get方法。
4.代码实现
package demo;
/**
* <p>Title:TestDemo.java</p>
* <p>Description:封装</p>
* @author Ben
* @date 2019-01-27 20:46
* @version 1.0
*/
public class TestDemo {
int age;
String name;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
二、继承
1.概念
多个类具有相同的属性(成员变量)和行为(成员方法)的时候,将这些公共的部分拿出来定义到一个类中,其他的类可以与这个公共的类形成继承关系,从而在多个类中不需要重新定义,这个公共类就是父类,也成为基类或超类。子类可以直接访问父类中可见的属性及方法,但是不可见的方法用super.get()进行调用。
2.特点
在Java继承关系中,不允许出现多重继承(一个类同时继承多个父类)但可以多层继承。
3.优点
提高代码复用率
类鱼类之间继承关系的存在,是实现多态操作的前提!
4.注意点
继承满足(is A)表达式
继承关键字:extends
5.代码实现
/**
* <p>Title:Person.java</p>
* <p>Description:继承关系</p>
* @author Ben
* @date 2019-01-27 20:59
* @version 1.0
*/
class Person {
String name;
int age;
public void fun() {
System.out.println("你真是个小可爱");
}
}
package demo;
/**
* <p>Title:Student.java</p>
* <p>Description:子类</p>
* @author Ben
* @date 2019-01-27 21:01
* @version 1.0
*/
class Student extends Person {
}
6.重写:
子类出现与父类同名的方法时,会出现子类将父类的方法覆盖的情况,这种情况称为重写。
重写注意事项:
父类的私有方法不可以被重写
子类重写父类方法后,也可以通过this调用父类方法
重写时,子类的访问权限要大于或等于父类
静态方法只能被静态方法覆盖
三、多态
Java在进行程序开发时,程序中定义的引用变量所指向的具体类型和通过该引用类型的方法在调用时不确定,这就是多态。
1.多态存在的前提
必须存在继承关系
子类必须重写父类的方法
父类的引用变量指向子类的对象
2.多态的优点
多态对存在的代码具有可替代性
可扩充性
灵活性
简化性
3.多态注意
编译看父类,运行看子类!
4.代码实现
父类
/**
* <p>Title:Animal.java</p>
* <p>Description:多态父类</p>
* @author Ben
* @date 2019-01-27 21:21
* @version 1.0
*/
public class Animal {
String name;
public void eat() {
System.out.println("这里是Animal的吃");
}
}
子类
package demo;
/**
* <p>Title:Dog.java</p>
* <p>Description:子类</p>
* @author Ben
* @date 2019-01-27 21:22
* @version 1.0
*/
public class Dog extends Animal{
@Override
public void eat() {
System.out.println("这里是Dog的吃");
}
}
测试类:
package demo;
/**
* <p>Title:Test1.java</p>
* <p>Description:测试类</p>
* @author Ben
* @date 2019-01-27 21:25
* @version 1.0
*/
public class Test1 {
public static void main(String[] args) {
Animal animal = new Dog();//多态
animal.eat();
}
}
答案:这里是Dog的吃