1.多态:
多态:事物存在的多种体现形态;
动物 x=new 猫();
多态的扩展性:
1.多态的体现:
父类的引用指向了子类对象;
2.多态的前提:
必须是类与类之间的关系,要么继承,要么实现
3.多态的好处:
提高程序的扩展性
4.多态的弊端:
只能使用在父类的引用访问父类中的
abstract class Animal
{
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 kanjia()
{
System.out.println("看家");
}
}
class Demo
{
public static void main(String[] args)
{
function(new Cat);
function(new Dog);
}
public static void function(Animal a)
{
a.eat();
}
}
2.多态类型提升:
向上提升:Animal a=new Cat();
a.eat();
向下转型:
Cat c=(Cat)a;
c.CatchMouse();
判断所属类型:instanceof
if(a instanceof Cat) //a 是不是Cat类型
{
Cat c=(Cat);
c.CathcMouse();
}
3.示例:
基础班学生:学习 、睡觉
高级班学生:学习、睡觉
abstract class Student
{
public abstract void Study();
public void sleep()
{
System.out.println("躺着睡");
}
}
class DoStudent
{
public void doSome(Student stu)
{
stu.study();
stu.sleep();
}
}
class BaseStudent extends Student
{
public void study()
{
System.out.println("base study");
}
}
class Demo
{
public static void main(String[] args)
{
DoStudent d=new DoStudent();
d.doSome(new BaseStudent());
}
}
4.多态成员的特点:
Fu f=new Zi();
System.out.println(f.num);//输入父类的num值
Zi z=new Zi();
System.out.println(z.num);//输出子类的num值
多态中成员变量的特点:
无论编译和运行,都参考左边(引用型变量所属的类)
静态方法、函数:静态所属该类与对象无关;
5.object类 -equals()
equals:(equals(object obj))
Demo d1=new Demo();
Demo d2=new Demo();
Demo d3=d1;
System.out.println(d.equals(d3));// true
System.out.println(d1==d2);//false
System.out.println(d1==d3);//true
其实比较的是内存地址
示例类:
class Demo //默认继承object
{
private int num;
Demo(int num)
{
this.num=num;
}
public boolean equals(object obj)
{
if(!(obj instanceof Demo))
return false;
Demo d=(Demo)obj;
return this.num=d.num;
}
}
class Demo
{
public static void main(String[] agrs)
{
Demo d1=new Demo(4);
Demo d2=new Demo(5);
System.out.println(d1.equals(d2));
}
}
6.object类中的toString():
重写该方法:public String toString()
{
......;
}