面向对象编程:以要解决的问题中所涉及的的对象为主体
面向过程编程:以具体的解题过程为研究主体
核心:继承、多态、封装
对象之间的关系
1.继承
1.Java中的继承是单向继承,这样的设置是为了避免多态继承的缺点。
单向继承:一个子类只能继承自一个父类
多向继承:一个子类可以继承自多个父类
2.访问权限
| 同一类中 | 同一个包 | 不同包的子类 | 不同包的非子类 |
private | √ | | | |
默认 | √ | √ | | |
protected | √ | √ | √ | |
public | √ | √ | √ | √ |
子类继承父类的成员变量时,基本上都可以继承,但是private成员变量不可以直接访问
子类继承父类的方法时,不能继承构造方法,但是可以调用(用super调用),private方法也不可以直接访问。
3.final关键字
final修饰变量和成员变量,表示不能被修改(常量)
final修饰类,表示该类不能被继承
2.包含
当对象a是对象A的属性时,则成对象A包含对象a。eg:a为显像管,A为电视机 。
3.关联
当对象b的引用为对象A的属性时,称对象b和对象A相关联。
多态
1.向上转型
父类的引用所指向的是子类的实例。
(1)向上转型的三种形式:
- 直接赋值
- 方法传参
- 方法的返回值
方法传参举例:
Dog类
class Dog extends Animal{
public Dog(String name){
super(name );
}
public void befriendly(){
System.out.println(super.name + "对人很友好" + "o(* ̄▽ ̄*)ブ");
}
}
public class Test {
public static void main(String[] args){
// Cat cat =new Cat("小咪");
// cat.climb();
Animal dog = new Dog("二狗子");//Dog 类是 Animal类 的子类
feed(dog);
}
public static void feed(Animal animal){
animal.eat("大骨头");
}
}
方法的返回值举例:
Cat类
class Cat extends Animal{
public Cat (String name){
super(name);
System.out.println(name + " " + "is beautiful");
}
public void climb( ){
System.out.println(super.name + "爬树很厉害" + "✪ ω ✪");
}
}
public class Test {
public static void main(String[] args){
Animal animal = findMyLittleHoney();//父类引用指向该函数
}
public static Animal findMyLittleHoney(){
Cat cat = new Cat("Candy");
return cat;//返回一个子类的实例
}
}
(2)动态绑定
如果子类和父类中有一样的同名方法,当两个不同的父类引用分别指向父类和子类的实例时,指向父类实例的调用的是父类中的同名方法,指向子类实例的调用子类的同名方法。
动态:发生在运行过程中。
(3)方法重写
子类中的方法和父类的方法名、参数列表完全一样的方法,称为方法重写。
普通方法可以重写,static修饰的方法不可以重写。
子类的方法访问权限不得低于父类的方法访问权限。
2.向下转型
子类的引用指向父类的实例
抽象类
抽象类一般格式:abstract class类名
抽象方法:abstract public修饰 不能是private型 抽象方法没有方法体,不用写花括弧,语句后面直接写分号。抽象方法不可以直接实例化,需要进行方法重写。
抽象类中可以有成员变量和普通方法,子类也可以调用
接口
接口比抽象类更抽象
接口中只能有抽象方法和静态常量(static final)
抽象类和接口的区别
- 两者内容有别。抽象类中有抽象方法、普通方法以及成员变量;接口中只能有抽象方法和静态常量(static final)
- 一个子类只能继承一个抽象类,一个子类可以实现多个接口
- 抽象类被继承的关键字是:extends;抽象类的关键字是:implements
- 抽象类有各种权限,而接口是public
- 一个抽象类可以实现若干个接口,但是接口不能继承抽象类,接口可以使用extends关键字继承多个父接口