服务器上发布网站,常州自助做网站,wordpress如何安装模板文件夹,网站价值评估 php多态的前提条件#xff1a;继承可以简单理解为#xff1a;把子类看成父类类型#xff08;反之是错误的#xff09;
优缺点
弊端: 只能使用父类#xff08;父接口#xff09;中定义的功能好处: 函数的参数定义为父类#xff08;父接口#xff09;类型#xff0c;可以…多态的前提条件继承可以简单理解为把子类看成父类类型反之是错误的
优缺点
弊端: 只能使用父类父接口中定义的功能好处: 函数的参数定义为父类父接口类型可以接收所有父类的子类对象从而避免了定义大量的参数为子类类型的函数
// 正常情况猫就是猫 猫 maonew 猫();
// 多态把猫看成动物 动物 maonew 猫();
abstract class Animal
{public abstract void eat();
}
class Cat extends Animal
{public void eat(){System.out.println(猫吃鱼);}public void catchMouse(){System.out.println(猫抓耗子);}
}
class Dog extends Animal
{public void eat(){System.out.println(狗吃骨头);}public void watch(){System.out.println(狗看门);}
}
class Demo15
{public static void main(String[] args){/*Cat maonew Cat();mao.eat();mao.catchMouse();*///把猫看成父类类型那么只能使用父类中定义的功能Animal maonew Cat();mao.eat();//mao.catchMouse();}
}弊端修饰
向下转型
abstract class Animal{public abstract void eat();
}
class Cat extends Animal{public void eat(){System.out.println(猫吃鱼);}public void catchMouse(){System.out.println(猫抓耗子);}
}
class Dog extends Animal{public void eat(){System.out.println(狗吃骨头);}public void watch(){System.out.println(狗看门);}
}
class Demo1{public static void main(String[] args){//向上转型自动//Animal maonew Cat();//mao.eat();//向下转型//Cat cat(Cat)mao;//cat.catchMouse();chi(new Cat());}public static void chi (Animal animal){animal.eat();if(animal instanceof Cat){//向下转型Cat mao(Cat)animal;mao.catchMouse();}if(animal instanceof Dog){Dog gou(Dog)animal;gou.watch();}}
}instanceof 是 Java 的一个二元操作符类似于 等操作符。 instanceof 是 Java 的保留关键字。它的作用是测试它左边的对象是否是它右边的类的实例返回 boolean 的数据类型。 成员特点
成员变量: 编译时期看父类运行结果也看父类成员方法: 编译时期看父类运行结果看子类子类重写了静态成员方法: 编译时期看父类运行结果也看父类。
class Fu
{int age55;public void show(){System.out.println(show fu);}public static void ff(){System.out.println(static fu);}
}
class Zi extends Fu
{int Weight;int age66;public void show(){System.out.println(show zi);}public void fun(){System.out.println(fun zi);}public static void ff(){System.out.println(static zi);}
}
class Demo2
{public static void main(String[] args) {Fu zinew Zi();System.out.println(zi.age);//55//System.out.println(zi.age);zi.show();//show zi//zi.fun();zi.ff();//static fu}
}接口和多态
对类存在的语法对接口也存在
interface inter
{public abstract void show();
}
class Test1 implements inter
{public void show(){System.out.println(show1);}
}
class Test2 implements inter
{public void show(){System.out.println(show2);}
}
class Demo5
{public static void main(String[] args) {Test1 t1new Test1();fun(t1);Test2 t2new Test2();fun(t2);}public static void fun(inter test){test.show();}
}模板设计模式
实现一个功能时功能的一部分是确定的一部分是不确定确定的部分还会用到不确定的部分那么就把不确定的部分暴露出去让子类去实现。 计算一个功能运行所需时间 确定的部分记录一个开始时间记录一个结束时间结束时间 - 开始时间 不确定的部分功能 abstract class TimeTool
{public final void times(){//记录一个开始时间//得到当前时间的毫秒值:1970.1.1long startSystem.currentTimeMillis();//功能代码fun();//记录一个结束时间long endSystem.currentTimeMillis();System.out.println(运行时间(end-start));}public abstract void fun();
}
class Zi extends TimeTool
{public void fun(){for (int i1;i3000;i){System.out.println(i);}}
}
class Demo3
{public static void main(String[] args) {Zi zinew Zi();zi.times();}
}Object
最顶层的类超类提取的是万事万物的共性。除了Object其余的类都有父类
equals
boolean equals(Object obj)多态 任意两个对象都能比较是不是同一个对象 Person rennew Person();
Cat maonew Cat();
boolean booren.equals(mao);
System.out.println(boo);判断两个人是否是同龄人 class Person{int age;Person(){}Person(int age){this.ageage;}public boolean equals(Object obj){//各种情况都要考虑到保证任何情况下都要有返回值if (objnull)//避免空指针return false;if (obj instanceof Person){ //向下转型Person ren(Person)obj;return this.ageren.age;}return false;}
}
class Demo4 {public static void main(String[] args) {Person ren1new Person(18);Person ren2new Person(20);Boolean booren1.equals(ren2);System.out.println(boo);}
}toString
输出一个对象时默认调用toString方法返回对象的字符串表示形式
class Person {//String toString(){}
}
class Demo{public static void main(String[] args){Person rennew Person();System.out.println(ren);//Fu15db9742 类名hash值System.out.println(ren.toString());//Fu15db9742//得到对象的哈希值int coderen.hashCode();System.out.println(Integer.toHexString(code));//得到一个对象所对应的类名Class clazren.getClass();//得到类 Person.class 字节码String nameclaz.getName();System.out.println(name);System.out.println(ren.getClass().getName()Integer.toHexString(ren.hashCode()));}
}由于输出一个对象时默认调用toString方法。通常通过重写toString方法来返回有用的数据。 class Person {int age;String name;Person(){}Person(int age,String name){this.ageage;this.namename;}public String toString(){return name,age;}
}
class Demo{public static void main(String[] args){Person rennew Person(28,小明);System.out.println(ren);}
}