面向对象三大特性
1.封装
通常认为封装是把数据和操作数据的方法绑定起来,对数据的访问只能通过已定义的接口。面向对象的本质就是将现实世界描绘成一系列完全自治、封闭的对象。我们在类中编写的方法就是对实现细节的一种封装;我们编写一个类就是对数据和数据操作的封装。可以说,封装就是隐藏一切可隐藏的东西,只向外界提供最简单的编程接口。
代码举例
1.需求
- 定义学生类Student(包含姓名和年龄属性)
- 在StudentTest测试类中,创建Student类的对象,并调用其中的成员
- 对年龄和姓名添加private修饰
//学生类
public class Student{
private String name;
private int age;
}
//get和set方法
public void setAge(int age){
this.age = age
}
public int getAge(){
return age;
}
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
测试调用:
public class StudentClass{
public static void main(Stringp[] args){
Student student = new Student();
student.setName("蔡文姬");
student.setAge(18);;
System.out.println("该学生的的名字:"+student.getName()+","+student.getAge()+"岁");
}
}
输出结果
该学生的名字:蔡文姬,18岁
2.继承
继承是从已有类得到继承信息创建新类的过程。提供继承信息的类被称为父类(超类、基类);得到继承信息的类被称为子类(派生类)。继承让变化中的软件系统有了一定的延续性,同时继承也是封装程序中可变因素的重要手段。
继承的特性
- 子类拥有父类非 private 的属性、方法。
- 子类可以拥有自己的属性和方法,即子类可以对父类进行扩展。
- 子类可以用自己的方式实现父类的方法。
- Java 的继承是单继承,但是可以多重继承,单继承就是一个子类只能继承一个父类,多重继承就是,例如 B 类继承 A 类,C 类继承 B
代码举例
public class Animal{
//父类
void eat(){
System.out.println("animal : eat");
}
}
public class Dog extends Animal{
void eat(){
System.out.println("dog : eat");
}
void eatTest(){
this.eat();//this 调用自己的方法
super.eat();//super 调用父类的方法
}
}
public class Test{
public static void main(Sting[] args){
Animal a = new Aminal();
a.eat();
Dog d = new Dog();
d.eatTest();
}
}
结果
animal : eat
dog : eat
animal : eat
3.多态
多态是指允许不同子类型的对象对同一消息作出不同的响应。简单的说就是用同样的对象引用调用同样的方法但是做了不同的事情。多态性分为编译时的多态性和运行时的多态性。如果将对象的方法视为对象向外界提供的服务,那么运行时的多态性可以解释为:当 A 系统访问 B 系统提供的服务时,B 系统有多种提供服务的方式, 但一切对 A 系统来说都是透明的。方法重载(overload)实现的是编译时的多态性(也称为前绑定),而方法重写
(override)实现的是运行时的多态性(也称为后绑定)。运行时的多态是面向对象最精髓的东西,要实现多态需要做两件事:1. 方法重写(子类继承父类并重写父类中已有的或抽象的方法);2. 对象造型(用父类型引用引用子类型对象,这样同样的引用调用同样的方法就会根据子类对象的不同而表现出不同的行为)。
前提条件
- 要有继承关系.
- 要有方法重写.
- 要有父类引用指向子类对象.
java中多态主要表现在以下两方面
1.引用多态
父类的引用可以指向本类的对象;
父类的引用可以指向子类的对象
public static void main(String[] args){
Animal obj1 = new Animal();
//父类的引用指向本类
Animal obj2 = new Dog();
//父类的引用指向子类
}
2.方法多态
根据上述创建的两个对象:本类对象和子类对象,同样都是父类的引用,当我们指向不同的对象时,它们调用的方法也是多态的。
创建本类对象时,调用的方法为本类方法;
创建子类对象时,调用的方法为子类重写的方法或者继承的方法;
代码实现
public abstract class Animal{
//抽象方法
public abstract void shout();
}
public class Cat extends Animal{
@Override
public void shout() {
System.out.println("喵喵喵!!!");
}
}
public class Dog extends Animal{
@Override
public void shout() {
System.out.println("汪汪汪");
}
}