目录
一、多态
1. 多态的概述
2. 多态的前提
3. 多态的案例:猫属于猫类,同时也属于动物
public class Animal {
int age;
String name;
public void sleep(){
System.out.println("睡觉");
}
public void eat(){
System.out.println("吃饭");
}
}
public class Cat extends Animal {
@Override
public void sleep() {
System.out.println("白天睡觉");
}
}
public class Test {
public static void main(String[] args) {
Animal animal=new Cat();
animal.eat();
animal.sleep();
}
}
4. 多态中的成员访问特点
示例:
//Animal父类:
public class Animal {
String name="父类的成员变量";
public static void get(){
System.out.println("父类的静态方法");
}
public Animal() {
System.out.println("父类的构造方法");
}
public void show(){
System.out.println("父类的成员方法");
}
}
//Cat子类:
public class Cat extends Animal {
String name="子类的成员变量";
public Cat(){
System.out.println("子类的构造方法");
}
public void show(){
System.out.println("子类的成员方法");
}
}
//Test测试类:
public class Test {
public static void main(String[] args) {
Animal animal=new Cat();
System.out.println(animal.name);
animal.show();
animal.get();
}
}
5. 多态的好处和弊端
好处:
提高了代码的维护性(由继承保证);
提高了代码的扩展性(由多态保证)。
弊端:
不能使用子类特有的功能。
6. 向下转型和向上转型
public class Test { //向下转型
public static void main(String[] args) {
Animal animal = new Cat();
Cat cat = (Cat) animal;
}
}
public class Test { //向上转型
public static void main(String[] args) {
Cat cat = new Cat();
Animal animal = (Animal) cat;
}
}
二、抽象类
-
什么是抽象类
Java中,一个没有方法体的方法应该定义为抽象方法,如果一个类中有抽象方法,那么这个类必须定义为抽象类。
-
抽象类的特点
实例:抽象类不能直接进行实例化,但是其具体的子类可以进行实例化;
//父类
public abstract class Fu {
public abstract void show();
public abstract void say();
}
//子类
public class Zi extends Fu{
public void show(){
System.out.println("重写的show方法");
}
public void say(){
System.out.println("重写的say方法");
}
}
//测试类
public class Test {
public static void main(String[] args) {
Zi zi=new Zi();
}
}
3. 抽象类的成员特点
4. 抽象类猫狗实例
//父类Animal
public abstract class Animal {
int age;
String name;
public abstract void eat();
public Animal() {
}
public void sleep(){
System.out.println("睡觉");
}
}
//子类Cat
public class Cat extends Animal {
public Cat(int age,String name) {
this.age=age;
this.name=name;
}
@Override
public void eat() {
System.out.println("猫吃鱼");
}
}
//子类Dog
public class Dog extends Animal {
public Dog(int age, String name) {
this.age=age;
this.name=name;
}
@Override
public void eat() {
System.out.println("狗吃骨头");
}
}
//测试类Test
public class Test {
public static void main(String[] args) {
Animal animal=new Cat(5,"mimi");
Animal animal2=new Dog(3,"qiqi");
System.out.println(animal.age);
System.out.println(animal.name);
System.out.println(animal2.age);
System.out.println(animal2.name);
animal.eat();
animal.sleep();
animal2.eat();
animal2.sleep();
}
}
三、接口
-
在Java中,为了体现事物功能的扩展性,提供了接口来定义这些额外功能,并且不给出具体的实现。
-
接口的特点
3. 接口的成员特点
4.类与类、类与接口、接口与接口的关系
5.抽象类与接口的区别
抽象类:
接口:
设计理念的区别: