面向对象的三个特征:
封装、继承、多态
封装:
1、加访问权限关键词 :private
//只能本类才能访问,其他类都访问不了,如此就对信息进行了隐藏。
2、在本类写public方法来对private变量和方法进行调用。
//外部类访问该类成员变量的入口
继承:
Java语言中的类只支持单继承,而接口支持多继承。Java中多继承的功能是通过接口(interface)来间接实现的
继承的特性:
子类拥有父类非private的属性,方法。 //不能继承private修饰的
子类可以拥有自己的属性和方法,即子类可以对父类进行扩展。
子类可以用自己的方式实现父类的方法。
关键词 extends 、 implements:
extends:
extends 只能继承一个类
普通类:
public class Animal { //父类
private String name;
public int id;
public Animal(String myName, String myid) {
//初始化属性值
}
public void eat() { //吃东西方法的具体实现 }
public void sleep() { //睡觉方法的具体实现 }
}
public class Penguin extends Animal{ //子类继承父类,不能继承Private修饰的
public int id; //对父类id变量的隐藏
public void eat(){ //对父类中的eat方法的覆盖
}
}
抽象类:
abstract class People{
String name;
int age;
public People(String name,int age){
this.name=name;
this.age=age;
}
public abstract void fun(); //定义抽象方法
}
子类继承:
class Student extends People{
//构造函数
//对父类抽象方法的实现
@Override
public void fun(){
}
}
implements: //接口
一个类通过关键字implements声明自己使用一个或者多个接口
interface Animal {
int age=10 //public static final修饰的变量,必须初始化。
public void eat(); //默认public abstract
public void travel();
}
用接口:
class cat implments Animal{
@Override
void eat(){
///
}
@Override
void travel(){
///
}
}
子类和父类的调用:
1.将子类对象类型强制转化为父类类型,进行调用;
People p;
Student s=(Student)p;
2.通过super调用。
1、子类的构造过程中必须调用父类的构造方法 。
2、子类可在自己的构造方法中使用super()来调用父类的构造方法 。
(1)如果调用super必须写在子类构造方法的第一行 。(2)使用this来调用本类的另外的构造方法 。
3、 如果子类的构造方法中没有显示的调用父类的构造方法,则系统默认的调用父类的无参的构造方法。
4、 (super.成员变量或成员方法 ) 访问基类的数据。
5、当子类对象调用重写的方法时,调用的是子类的方法,而不是父类中被重写的方法。
要想调用父类中被重写的方法,则必须使用关键字super。
多态:
发生的三个条件:
静多态:(编译期多态):重载
动多态:运行时多态的实现:
1、继承
2、方法的重写
3、向上造型(定义基类的引用,引用派生类的对象)
方法的重写 :(父类 子类之间)作用域不同、 方法名和参数列表相同。
方法的重载 :(同一个类)作用域相同 、 方法名相同 参数列表一定不同。