一、继承
继承的概念
继承是面向对象三大特征之一,可以使得子类具有父类的属性和方法,还可以在子类中重新定义,以及追加属性和方法。
继承的格式
继承通过extends实现;
格式:class 子类 extends父类 { }
public class son extend Fu{
}
继承好处
提高了代码的复用性;
提高了代码的维护性。
继承弊端
继承让类与类之间产生了关系,类的耦合性增强了,当父类发生变化时子类实现也得跟着变化,削弱了子类的独立性。
public class Person {
private String nickname;
private int gender;
private int age;
}
public class Boy extends Person{
}
public class Girl extends Person{
}
方法重载
在同一个类中 方法参数列表不同的同名方法 这种表现形式我们称之为方法重载。
方法重写
当父类的方法满足不了子类的需求 子类可以重写父类的方法 这种表现形式我们称之为方法重写。
方法重载与方法重写的区别
方法重载是同一个类中,而方法重写必须存在子父类继承关系。
public class Person {
private String nickname;
private int gender;
private int age;
public Person() {
System.out.println("我是Person类的无参构造方法");
}
public Person(String nickname, int gender, int age) {
System.out.println("我是Person类的有参构造方法");
this.nickname = nickname;
this.gender = gender;
this.age = age;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
public int getGender() {
return gender;
}
public void setGender(int gender) {
this.gender = gender;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public void eat() {
System.out.println("造造造");
}
}
匿名内部类
public class Outer01 {
public class Inner {
public void run() {
System.out.println("加油吧少年");
}
}
public void innerRun() {
new Inner().run();
}
}
public class Outer02 {
public static void innerRun() {
class Inner {
public void run() {
System.out.println("加油吧少年");
}
}
new Inner().run();
}
}
public class Outer03 {
public void innerRun() {
class Inner{}
new Inner(){
public void run(){
System.out.println("加油吧少年");
}
};
}
}
测试代码:
public class InnerTest {
@Test
public void outer01(){
new Outer04().innerRun();
}
@Test
public void outer02(){
Outer06.innerRun();
}
@Test
public void outer03(){
new Outer08().innerRun();
}
}
二、多态
多态是同一个行为具有多个不同表现形式或形态的能力。
多态就是同一个接口,使用不同的实例而执行不同操作,如图所示
多态性是对象多种表现形式的体现。
多态的优点
a.消除类型之间的耦合关系
b.可替换性
c.可扩充性
d.接口性
e.灵活性
f.简化性
多态存在的三个必要条件
a.继承
b.重写
c.父类引用指向子类对象
多态的实现方式
方式一:重写与重载
Java 重写(Override)与重载(Overload)。
方式二:抽象类和抽象方法
方式三:接口
就是一些方法特征的集合,但没有方法的实现
生活中的接口:
在接口中的方法为抽象方法 不允许出现方法体; 从java8开始允许接口中的方法有方法体,但必须使用default或修饰; 在接口中 static 修饰的方法; 只能使用接口名点方法名的方式调用不能使用实现类的实例化对象调用; 不可以被子接口继承; 在接口中 default 修饰的方法; 只能使用实现类的实例化对象调用; 可以子接口继承; 可以被子接口重写; 可以被实现类重写。



