Java 03-父类-子类对象的使用

(1)建立父类对象和子类对象

    package hello;

	    class Animal{//建立一个Animal超类(父类)
		    public float weight= 10;//建立一个叫重量的字段(属性),因为所以动物都有重量对吧
		    public void eat() {	//建立eat(吃)的功能,同理所有动物都有吃的功能		
		    }
    	}
	    class Brid extends Animal{//建立一个Animal的子类Brid
		    public int Wings = 2;//作为一只正常鸟,它应该有两个翅膀
		    public void fly() {	//并且它拥有会飞的功能		
	    	}
	    }
	    class Dog extends Animal{//同理建立Animal的子类dog
		    public int Legs =4;//它拥有四条腿
		    public void walk() {//拥有行走的功能			
		    }				
	    }
	    public class Hello{ //创建一个类叫做Hello	
		
		    public static void main(String[] args) {
			
		    	Dog bill = new Dog();//建立一个叫bill的对象,也可以说有一条叫bill的dog
		    	bill.eat();//它可以使用作为动物基础的功能 子类可以使用父类的功能	
			    bill.walk();//它也可以使用身为一条狗的行走的功能	
    }
    }	

2.父类和子类的使用关系

    Animal animal = new Dog();//可以说这个动物类型是狗类型
    Dog bill = new Dog();//建立一个叫bill的对象,也可以说有一条叫bill的dog
    bill.eat();//它可以使用作为动物基础的功能 子类可以使用父类的功能
    //错误示例
    animal.walk();//这同样会产生错误因为在动物这个类型中没有行走的功能 父类不会子类的功能
    Dog dog = new Animal();//这会产生错误因为狗类不能代表动物这个类 子类不能大于父类

(2)方法覆盖 子类功能可以覆盖与父类相同名称的功能 注意这不是方法重载

    package hello;

	    class Animal{//建立一个Animal超类(父类)
		    public float weight= 10;//建立一个叫重量的字段(属性),因为所以动物都有重量对吧
		    public void eat() {	//建立eat(吃)的功能,同理所有动物都有吃的功能
			    System.out.println("吧唧吧唧");
		    }
	    }	
	    class Dog extends Animal{//同理建立Animal的子类dog
		    public int Legs =4;//它拥有四条腿
            @Override
		    public void eat() {
			    System.out.println("咕叽咕叽");
	    	}			
    	}
	    public class Hello{ //创建一个类叫做Hello	
		
	    	public static void main(String[] args) {
			
			    Dog bill = new Dog();//建立一个叫bill的对象,也可以说有一条叫bill的dog
			    Animal a =new Animal();
			    bill.eat();//咕叽咕叽 说明子类功能可以覆盖与父类相同名称的功能 				
        }
        }	

2,覆盖可见性 方法eatprotected提升到public 但是可见性不变  (不能覆盖final和private方法)

    class Animal{//建立一个Animal超类(父类)
		    public float weight= 10;//建立一个叫重量的字段(属性),因为所以动物都有重量对吧
		    protected void eat() {	//建立eat(吃)的功能,同理所有动物都有吃的功能
			    System.out.println("吧唧吧唧");
		    }
	    }	
	    class Dog extends Animal{//同理建立Animal的子类dog
	    	public int Legs =4;//它拥有四条腿
	    	public void eat() {//拥有行走的功能
			    System.out.println("咕叽咕叽");
		    }			
	    }

(3)子类的实例化

	    class Animal{//建立一个Animal超类(父类)
		    public Animal() {
			    System.out.println("easy");
		    }
	    }	
	    class Dog extends Animal{//同理建立Animal的子类dog
	    	public Dog(String s) {
		    	System.out.println(s);
	    	}
	    }
	    public class Hello{ //创建一个类叫做Hello			
		    public static void main(String[] args) {	
			    Dog eam =new Dog("World");//easy World 这证明子类实例化时,子类的构造方法先调  
                                                      //类用父的构造方法所以子类实例化时父类也                 
                                                      //实例化了
        }
        }	

2 super() 选择性调用父类构造方法

    package hello;

	    class Animal{//建立一个Animal超类(父类)
		    public Animal() {
		    	System.out.println("Hello");
		    }
		    public Animal(String s) {
			    System.out.println("Hello"+s);
		    }
	    }	
	    class Dog extends Animal{//同理建立Animal的子类dog
		    public Dog(String s) {
			    super(s);//将父类的构造方法变成功能重载使用
			    System.out.println(s);
		    }
	    }
	    public class Hello{ //创建一个类叫做Hello			
		    public static void main(String[] args) {	
			    Dog eam =new Dog("World"); //Hello World
	    	}
	    }

(4)类型转换

1向上转换

	    class Animal{//建立一个Animal超类(父类)
	    	int x=10;		
	    }	
	    class Dog extends Animal{
	    	int b=7;
	    }
	    public class Hello{ //创建一个类叫做Hello			
	    	public static void main(String[] args) {	
	    		Dog eam =new Dog();
	    		Animal animal = eam;//对象eam从Dog类向上转换成Animal类
	    		System.out.println(animal.x);//对象animal不可以访问Dog类中的可用成员
	    	}
	    }

2 向下转换 注意对象向下转换成为继承层次结构中的类

	    Dog eam =new Dog();
	    Animal animal = eam;//animal指向了eam的对象
	    Dog dog = (Dog)animal;//animal向下转换为dog类
	    System.out.println(dog.x);//可以访问Dog类中的可用成员
	    System.out.println(dog.b);//该对象dog可以访问Animal的可以成员 

3 非法向下转换 父类已经指向子类的实例时,才能进行向下转换

        public static void main(String[] args) {				
			Animal animal = new Animal();
			Dog dog = (Dog)animal;//这将产生编译错误	
		}

(6)最终类的定义 

    public final class Pencil

功能 以后无法扩展这个类,避免别人更改并且不能继承(不允许有子类)也能防止该类被子类化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值