Java中的继承:子类继承父类,会继承父类的所有非私有的属性和方法。
如何设计父类?
将子类共有的特点和行为抽离出来定义成父类。
如何设计子类?
将子类特有的特点和行为定义在子类中,其他的特点和行为使用父类的。
父类:
package test; public class Animal { String name;//名字 int age;//年龄 double weight;//体重 public void say(){ System.out.println("宠物叫了~~~"); } public void eat(){ System.out.println("宠物吃东西了~~~"); } }
子类:
package test; public class Cat extends Animal { //子类特有的 String beard;//胡须 public void say(){ System.out.println("喵~~~"); } }
package test; public class Dog extends Animal { public void say(){ System.out.println("汪汪汪~~~"); } }
测试类:
package test; public class AnimalTest { public static void main(String[] args) { //创建宠物对象 Cat cat1 =new Cat(); //Cat调用父类属性 cat1.name = "小咪"; System.out.println(cat1.name); //调用自己的属性 System.out.println(cat1.beard); cat1.say(); //此处调用的是从父类中继承过来的方法 cat1.eat(); Dog dog = new Dog(); //beard是猫特有属性,狗调用不到 // System.out.println(dog.beard); dog.say(); } }
运行结果:
子类会继承父类,他们的构造方法的执行顺序?
先执行父类的构造方法,再执行子类的构造方法。
注意:1.Java只支持单继承,一个Java类只能继承一个类
2.Java中可以多继承,继承具有传递性。 爷爷--->爸爸--->儿子
二、this关键字和super关键字this:当前对象 super:父类对象
public class Computer { String birth; public Computer() { System.out.println("1父类的无参构造器"); } public Computer(String birth) { this.birth = birth; System.out.println("3父类的有参构造器"); } }
public class Pad extends Computer { public Pad() { super();//调用父类的构造器,这一行默认添加 即先创建父类对象 System.out.println("2子类的无参构造器"); } public Pad(String birth) { super();//调用父类的构造器,这一行默认添加 即先创建父类对象 System.out.println("4子类的有参构造器"); } }
public class Test { public static void main(String[] args) { Pad pad1 = new Pad();//运行结果:13 Pad pad2 = new Pad("22");//运行结果:14 } }三、方法的重写与重载
(1)方法的重写override
发生在子类和父类的关系上,当子类含有和父类方法名相同、参数列表也相同的方法时,就不会再调用父类的方法,而是直接调用子类的方法,父类的方法就会被子类的方法覆盖掉,这种现象被称为方法的重写。
遵循两同两小一大 :
两同:方法名相同,参数列表相同;
两小:子类的返回值类型应该比父类的返回值类型小或者相等,子类抛出的异常要比父类的抛出的异常小或者相等;
一大:子类的访问修饰符要比父类的大或者相等。
(2)方法的重载overload
方法名相同,但参数列表不同(指的是类型、顺序不同,与参数名无关)
方法的重载与方法的访问修饰符以及返回值类型无关。
package test; public class Father { String name; int age; public void say(){ System.out.println(name+"您好~~~"); } public void eat(){ System.out.println("吃小龙虾~~"); } }
package test; public class Son extends Father { //方法的重写 public void eat(){ System.out.println("吃烤鱼~~"); } public void hello(){ System.out.println("helloworld~~"); } //与类型有关 public void hello(String name){ System.out.println("hello"+name); } //与参数名无关 // public void hello(String usname){ // System.out.println("hello"+name); // } //与返回值无关 // public String hello(String name){ // System.out.println("hello"+name); // } //与访问修饰符无关 // void hello(String name){ // System.out.println("hello"+name); // } public void hello(String name , int age){ System.out.println("hello"+name+",你的年龄:"+age); } //与参数顺序有关 public void hello(int age , String name){ System.out.println("hello"+name+",你的年龄:"+age); } }四、访问修饰符
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)