(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,覆盖可见性 方法eat从protected提升到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
功能 以后无法扩展这个类,避免别人更改并且不能继承(不允许有子类)也能防止该类被子类化