多态
多态是指,同一对象有多种表现形态
-必须要有继承关系
-要有方法重写
-使用父类接受子类对象
Animal a=new Dog();
//动物类(父类)
public class Animal{
public void eat(){
System.out.println("动物吃东西");
}
}
//狗类(子类)
public class Dog extends Animal {
//复写eat方法
@Override
public void eat() {
System.out.println("狗吃骨头");
}
}
//测试类
public class Demo1{
public static void mian{
//使用多态的方式,创建Dog对象
Animal a=new Dog();
a.eat();//狗吃骨头
}
}
多态中成员的访问
- 成员变量访问特点
如果父类有就执行父类,父类没有就报错。
- 成员方法的访问特点
有方法复写执行子类的,没有方法复写执行父类的。
多态的转型
- 向上转型(多态的写法)
Animal a=new Dog();
- 向下转型(强制类型转化)
多态的基础上,把父类类型转化为子类类型。
Animal a=new Dog();
Dog d=(Dog)a;
【注意:如果要进行向下转型,最好先用 instanceof 进行判断,避免出现ClassCastExcpetion】
抽象
抽象使用abstract关键字来表示,被它修饰的类叫抽象类,方法叫抽象方法
- 抽象类
1.不能够直接创建对象
2.一个具体的子类继承抽象类,必须复写所有的抽象方法
3.如果子类也是抽象类,可以不复写抽象方法
4.抽象类中可以有抽象方法,也可以有非抽象方法
- 抽象方法
不能有方法体
由抽象方法的类必须是抽象类
抽象类设计思想:限制子类的行为
public abstract class Animal {
//抽象方法
public abstract void eat();
public abstract void sleep();
//非抽象方法
public void show(){
System.out.println("show...show..");
}
}
public class Dog extends Animal {
@Override
public void eat() {
System.out.println("狗吃骨头");
}
@Override
public void sleep() {
System.out.println("狗在狗窝睡");
}
}
public class Demo3 {
public static void main(String[] args) {
Animal d = new Dog();
d.eat();
d.sleep();
}
}
接口
接口可以看做是一套公告的标准规范(通过抽象方法来实现),使用interface定义接口
//定义接口(规范标准)
public interface 接口名{
//抽象方法
}
//使用接口
public class 类名 implements 接口名{
//复写所有的抽象方法
}
接口成员特点
- 接口中的成员变量
其实是一个常量,默认被public static fianal
修饰(可省略)
//在接口中定义常量如下(名称每一个字母全都大写)
public static final double PI=3.141592653;
- 接口中的构造方法
接口中不能有构造方法,因为它不需要创建对象
- 接口中的成员方法
一般都写抽象方法,默认被 public abstract 修饰(可以省略)
(了解)JDK7以后的版本中,接口中还能写【默认方法、静态方法、私有方法】
**类与类、类与接口、接口与接口
```java
类与类:
继承关系,但是只能单一继承(一个儿子只能有一个亲爹)
类与接口:
实现关系,可以多实现(一个儿子可以有多个干爹)
接口与接口:
继承关系,可以多继承
**抽象类和接口设计思想的区别
抽象类:抽取子类中共性的行为
接口:为其他类选配一些功能