啥是多态?
- 多态意味着可以一个引用变量可以指向多个实际类型对象,并且程序能够根据对象类型执行不同操作。
- 多态主要有两种形式:
1.方法重载: - 在一个类中,方法名相同,但是参数列表不同的多个方法被称为方法重载。这不是真正的多态,但是它提供了多种方式来执行类似操作。
2.方法重写与运行中的多态 - 当子类继承父类并且重写父类中的方法时,通过父类指向子类引用对象,并且调用该方法时,会执行子类中的方法,而不是父类的方法。
- 这种多态性在运行时确定,因此也被称为运行时的多态。
例如: - 大学类:小明
- 小明是一名大学生
- 小明是一位学生
- 小明是一个对象,但是拥有两种身份
- 使用这个身份时
- 其中子类大学生的身份更加具体
- 学生类身份比较抽象
转型
- 基本数据类型的转型
- 强制转型:
- int i=1.2//int i=(int)1.2;
- double d=1.2;int i=(int)d;
- 自动转型:int i=1000;double d=i;
- 强制转型:
- 引用数据类型:类、接口、数组
- 自动转型:
- A a=new A();
- B b=a;
这两行代码实现的前提是什么?
答:B是A的父类 - 一个学生一定是大学生吗?不一定
- 但一个大学生一定是一个学生
- 子类创建对象时,对象的地址一般会存在子类类型对应的变量名中
- A a=new A();//注:a是对象变量名,对象是内存中的一份数据体
- 子类对象的引用地址也可以存在一个父类类型的对象变量名中
- A extends B| B b=a
- 子类继承父类时,可以继承父类的属性和方法
- 子类可以定义自己的属性和方法
- 子类可以重写父类的方法
- 子类对象经过转型之后,调用有无变化?
- 可以调用继承方法,如果继承的方法被子类重写了,那就调用子类重写的方法
- 父类不能调用子类独有的方法。
以下为示例代码
public class User {
String name;
String password;
int age;
boolean isVIP;
boolean isAdmin;
boolean isUser;
public void home() {
System.out.println("欢迎登录XX系统后台");
System.out.println("这里是您个人主页,用户等级:普通用户");
}
}
class AdminUser extends User {
@Override
public void home() {
System.out.println("欢迎登录XX系统后台");
System.out.println("这里是您个人主页,用户等级:管理员");
}
}
class VIPUser extends User {
@Override
public void home() {
System.out.println("欢迎登录XX系统后台");
System.out.println("这里是您个人主页,用户等级:会员");
}
}
class SystemMain {
public static void login(User user, String pwdIn) {
if (user.password.equals(pwdIn)) {
user.home();
} else {
System.out.println("密码错误,登录失败!");
}
}
public static void main(String[] args) {
User user = new User();
user.password = "123";
AdminUser admin = new AdminUser();
admin.password = "123";
VIPUser vip = new VIPUser();
vip.password = "123";
// 分别登录不同类型的用户
SystemMain.login(user, "123");
SystemMain.login(admin, "123");
SystemMain.login(vip, "123");
}
}
注意:使用继承时,一定要确认子类和父类不在同一个类下,即:user类下不包含admin类和vip类,这两个类是单独出来的,否则会报错!