发布时间:2023-07-15 16:30
多态 : 一种事物的多种形态|表现形式,是一种行为多态。
public class Class001_Poly {
public static void main(String[] args) {
//对应类型数据赋值给对应类型的变量
Person p = new Person();
Student s = new Student();
//正常调用 : p或者s调用的成员 : 1)自己类中存在的成员 2)从父类中继承的成员
//多态
Person ps= new Teacher();
//多态的调用
System.out.println(ps.str);
ps.test();
}
}
class Person{
String str = "父类";
public void test(){
System.out.println("Person----> test");
}
}
class Student extends Person{
String str = "子类";
public void test(){
System.out.println("Student----> test");
}
}
class Teacher extends Person{
String str = "子类2";
public void test(){
System.out.println("Teacher----> test");
}
}
基本 : 数据类型转换
引用 : 转型
java.lang.ClassCastException类型转换异常
instanceof 运算符
public class Class001_Cast {
public static void main(String[] args) {
int i = 1;
//自动类型提升
long l = i;
//强制类型转换
int i2 = (int)l;
Zi zi = new Zi();
//向上转型
Fu fu = zi;
//多态
Fu f = new Zi(); //f对子类新增内容不可见
//向下转型
//Zi zi2 = (Zi)f; //Zi zi2 = new Zi(); --> 可以调用子类独有内容
//转型转错了,转成了其他的子类类型---> java.lang.ClassCastException类型转换异常
if(f instanceof Brother){
Brother zi2 = (Brother)f; //Brother zi2 = new Zi(); --> 可以调用子类独有内容
zi2.test();
}else if(f instanceof Zi){
Zi zi2 = (Zi)f;
zi2.test();
}
System.out.println(f instanceof Fu); //T
System.out.println(f instanceof Zi); //T
System.out.println(f instanceof Brother); //F
}
}
class Fu{}
class Zi extends Fu{
String str="Zi";
void test(){
System.out.println("子类Zi方法test");
}
}
class Brother extends Fu{
String str="Brother";
void test(){
System.out.println("子类Brother方法test");
}
}
Object : 老祖宗类
toString :返回对象的字符串表现形式
==
:比较两个数据是否相等
equals
:比较两个对象数据是否相等
为什么要子类中重写equals方法 :
注意:javabean的定义规范 :
public class Class001_Object{
public static void main(String[] args) {
Student s1 = new Student(1001,"张三丰",100);
Student s2 = new Student(1001,"张三丰",10);
System.out.println(s1);
System.out.println(s1.toString());
System.out.println(s1.equals(""));;
}
}
class Student{
int no;
String name;
int age;
public Student(){}
public Student(int no,String name,int age){
this.no = no;
this.name = name;
this.age = age;
}
public String toString() {
return no+"-->"+name+"-->"+age;
}
//比较字符串类型的数据 : 使用String重写的equals比较字符串对象的内容而非地址
public boolean equals(Object obj) { //Object obj = new Student(1001,"张三丰",100);
//增强程序健壮性判断
if(this==obj){
return true;
}
//两个对象 : this obj
//obj向下转型
if(obj instanceof Student){
Student s = (Student)obj;
//两个对象 : this s
return this.no==s.no && this.age==s.age && this.name.equals(s.name);
}
return false;
}
}
抽象类 : 被abstract修饰的类
抽象方法 :被abstract修饰的方法
需求 :定义开发部门不同职位工作内容
注意 :
public class Class001_Abstract {
public static void main(String[] args) {
//抽象类不能实例化
//Develop d = new Develop();
//具体子类对象
Java java = new Java();
java.sleep();
java.work();
java.test();
java.insert();
}
}
//父类
abstract class Develop{
//work方法体不知道怎么写,不知道写什么--->
public abstract void work();
public abstract void sleep();
public void test(){
System.out.println("抽象方法的test");
}
}
//具体子类
class Java extends Develop{
@Override
public void work() {
System.out.println("后端开发");
}
@Override
public void sleep() {
System.out.println("边敲代码边睡觉... ");
}
//新增
public void insert(){
System.out.println("java中新增方法");
}
}
//抽象子类
abstract class Web extends Develop{
@Override
public void work() {
System.out.println("前端开发");
}
//新增
public void webInsert(){
System.out.println("web 新增");
}
}