java 面对对象
1.封装
概念
使用private将属性或者方法进行封装,让数据被保护在内部,程序的其他部分只能通过被授权的方式才能进行访问和操作。
实现
1.将属性进行私有化(private)
2.提供一个set方法,用于对属性的判断和赋值
3.提供一个公共的方法get,用于获取属性的值
class Person{
//私有化年龄和姓名两个属性
private String name;
private int age;
//获得name的get方法
public String getName() {
return name;
}
//给name赋值的set方法
public void setName(String name) {
this.name = name;
}
//获得age的get方法
public int getAge() {
return age;
}
//给age赋值的set方法
public void setAge(int age) {
this.age = age;
}
}
2.继承
概念
继承是从已有的类中派生出新的类,新的类能继承已有类的数据属性和行为,并能扩展新的能力(方法,属性)。
其中被继承的类叫做父类、超类或者基类,继承父类的被叫做子类或者派生类。
规则
1.要使用继承必须满足is a 关系,比如狗是动物,人也是动物,所以人和狗都可以继承动物。
2.一个子类只能继承一个父类,也就是单继承关系,但是父类可以被许多个子类继承。
3.子类会继承父类所有的属性和方法,能否继承需要看父类的属性和方法的访问权限。
4.隐式继承(private属性和方法),子类继承了这个方法和属性,但是无法直接使用。
5.子类必须调用父类的构造器,完成父类的初始化
6,当创建子类对象时,只要子类调用了构造器,就会默认先去调用父类的无参构造器,如果父类中没有无参构造器,则需要用super关键字去指定父类的具体构造器完成对付类的初始化。
7.当子类调用父类的构造器时,不止会调用父类的,还可能会调用父类的父类的构造器,一直往上调用超类的构造器。
super关键字
1.super修饰属性,表示从父类中寻找同名属性,但不能访问private属性;使用方式super.属性名
class Animal{
public void eat(){
System.out.println("动物正在吃");
}
}
class Person extends Animal{
public void test(){
super.eat();
}
}
2.super修饰方法,修饰构造方法和普通方法。但不能访问private方法;使用方式super.方法名(参数列表)
3.super在使用时,必须放在构造器的第一行
4.super和this都必须放在构造器第一行,所以两个方法无法同时写在构造器第一行。
5.当父类和子类的成员中有重名时,为了访问父类的成员,必须通过super去访问。
方法重写
方法重写是指发生在有继承关系的类之间,子类定义了和父类除了权限不同外的完全相同的方法,方法名称,返还值,参数列表完全相同。
注意———子类的返还值的类型是父类返还值类型的子类同样可以。
子类覆写方法权限
子类覆写方法权限>=父类权限,private方法无法被覆写,父类中的private方法无法被子类直接使用=>子类压根就不知道父类有这方法,更何谈覆写。
比如子类的public void fun(){}方法 可以访问父类的protected(或者默认) void fun(){}方法。
子类访问权限
当一个子类继承了一个父类,并且父类方法、属性等带有权限,则子类的访问权限必须大于父类(private访问权限除外)。
子类方法不能缩小父类方法的访问权限。
3.多态
概念
同一个引用调用同一个方法名,根据引用指向不同的对象可以表现出不同的行为叫做多态。
多态常用形式:继承 + 方法重写
向上转型
本质:父类引用指向了子类的对象
父类名称 父类引用 = new 子类实例();
Person person = new China();
person引用不管指向的具体是那个对象,能调用哪些方法是Person这个类说的算,person能.谁是new后面的。
向下转型
使用场景:已知一个父类引用,但是我们要使用子类的拓展方法,此时就得把这个父类引用还原为子类引用(只有一个对象)。
子类名称 子类引用 = (子类名称) 父类引用; China china = (China) person;
Animal animal = new Dog();
animal. play()// error
此时在不创建新子类对象的前提下,就得使用向下转型。
Dog dog = (Dog) animal;//right
向下转型只能强转父类的引用,不能强转父类的对象。
向下转型要求父类的引用必须指向的时当前目标类型的对象。