20190420162312.png
package cn.allms.bean;
/**
* 动物对象类
* @author allms
*
*/
public class Animal {
private String name = "浅枫"; //动物名,私有属性
public Integer age = 1; //动物的年龄,共有属性
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
// 共有方法
public void call() {
System.out.println("动物发出叫声!");
}
// 私有方法
@SuppressWarnings("unused")
private void jump() {
System.out.println("动物跳高的私有方法!");
}
// 静态方法
public static void sleep() {
System.out.println("动物睡觉的静态方法");
}
public void look() {
System.out.println("我看了动物一眼");
}
}
package cn.allms.bean;
/**
* 猫继承动物类
* @author allms
*
*/
public class Cat extends Animal {
/**
* 继承:继承父类的开辟的控件,子类对父类的继承,继承的是继承方法访问权限,而不是代码片段
* 共有的方法能直接访问,而不是子类存在这个方法
* 成员变量的继承:继承父类的成员变量的空间
* 方法的继承:不继承空间,只是继承方法的访问权限
*/
public void call() {
System.out.println("小猫发出叫声!");
}
public void look() {
System.out.println("我看了猫一眼");
}
}
package cn.allms.bean;
public class Dog extends Animal {
public void look() {
System.out.println("我看了狗狗一眼");
}
}
package cn.allms.test;
import cn.allms.bean.Animal;
import cn.allms.bean.Cat;
/**
* 测试类
* @author allms
*
*/
public class MyTest {
public static void main(String[] args) {
Cat cat = new Cat(); //创建Cat对象的一个实列
//cat.name=""; // 私有属性不能够直接访问
//String catName = cat.getName(); //私有属性只能通过简介的共有方法访问
System.out.println(cat.age); //父类的age,直接输出父类的初始值1
System.out.println(cat.age=5); // 共有属性可以直接访问并赋值
System.out.println(cat.getName());//调用共有的getName()方法
//cat.jump();//父类的私有方法无法被访问
// 方法重写/覆盖:子类开辟一个内存空间,并不是覆盖父类的内存空间,父类的方法任然存在
cat.setName("沐雪");
System.out.println(cat.getName());//调用共有的getName()方法
cat.call();// 子类的call()方法
System.out.println("---------------------父类的方法属性依旧存在");
/**
* 方法重写/覆盖并不能把父类的方法属性进行覆盖抹去
*/
Animal animal = new Animal();//创建动物类的一个实例
animal.call();
System.out.println(animal.getName());//调用共有的getName()方法
System.out.println(animal.age);
}
}
运行结果
1
5
浅枫
沐雪
小猫发出叫声!
---------------------父类的方法属性依旧存在
动物发出叫声!
浅枫
1
package cn.allms.test;
import cn.allms.bean.Animal;
import cn.allms.bean.Dog;
public class MyTest2 {
public static void main(String[] args) {
Dog dog = new Dog();
Animal animal = new Animal();
/**
* 运行不会报错,Dog类并没有call()方法,但它继承了Animal类
* 则自动调用父类的call()方法
*/
dog.call();
animal.call();
}
}
运行结果
动物发出叫声!
动物发出叫声!
package cn.allms.test;
import cn.allms.bean.Animal;
import cn.allms.bean.Cat;
import cn.allms.bean.Dog;
public class MyTest3 {
public static void main(String[] args) {
// 上下型,无论后面是什么引用类型,都会调用Animal类的slee()静态方法
Animal animal_1 = null;
animal_1.sleep();
Animal animal_2 = new Cat();
animal_2.sleep();
Animal animal_3 = new Dog();
animal_3.sleep();
}
}
运行结果
动物发出叫声!
动物发出叫声!
package cn.allms.test;
import cn.allms.bean.Animal;
import cn.allms.bean.Cat;
import cn.allms.bean.Dog;
/**
* 多态测试类
* @author allms
*
*/
public class MyTest4 {
public static void main(String[] args) {
// 上转型: 父类的引用指向子类对象
/**
* 父类的引用animal
* 指向子类对象 animal = new Cat(); animal = new Dog();
*/
Animal animal = null; //给动物类赋值为null
animal = new Cat();
animal.look();
animal = new Dog();
animal.look();
/**
* 多态:相同的引用Animal,调用相同的方法look(),产生不同的结果
* 多态的方式必须依赖:
* 1.必须有继承
* 2.必须有方法的引用
* 3.必须有上转型
*/
}
}
运行结果
我看了猫一眼
我看了狗狗一眼
package cn.allms.test;
import cn.allms.bean.Animal;
import cn.allms.bean.Cat;
import cn.allms.bean.Dog;
public class MyTest5 {
public static void main(String[] args) {
/**
* 下转型分为真下转型和假下转型
*/
/*============真下转型(默认不被允许)=============*/
// Animal animal= new Animal();
// Cat cat= (Cat)animal;
// // 运行报错:java.lang.ClassCastException
/*============假下转型=============*/
Animal animal = new Dog();
Dog dog = (Dog)animal; //下转型必须进行强制转换
dog.call(); //指向父类的call(),子类未重写父类的call()方法
dog.look(); //子类已经重写父类的look()方法
// True 假下转型,False 真下转型
Animal animal_1= new Animal();
if(animal_1 instanceof Cat) { //instanceof判断真下转型与下转型
Cat cat= (Cat)animal_1;
cat.look();
}
System.out.println("---------------------");
if(animal instanceof Dog) { //instanceof判断真下转型与下转型
Dog dog1= (Dog)animal;
dog1.look();
}
}
}
运行结果
动物发出叫声!
我看了狗狗一眼
---------------------
我看了狗狗一眼