- 一:类的继承
- 1:类不能跨包继承,同一个包下可以继承
- 2:类的属性也可以重写 重写规则参考方法的重写一样
- 二:this和super的用法
- 1:调用属性和方法
- 2:调用构造器
跨包继承的结果
java: 找不到符号 符号: 类 SwitchPractice2:类的属性也可以重写 重写规则参考方法的重写一样
方法的重写要遵循两同两小一大规则
两同: 方法名相同,形参列表相同
两小: 子类方法返回值类型应比父类方法返回值类型小或相等
子类方法声明抛出的异常类应比父类方法声明抛出的异常类更小或相等
二:this和super的用法 1:调用属性和方法一大: 子类方法的访问权限应比父类方法的访问权限大或相等.
(1):Cat类里自己是否定义了和Animal相同的属性
<定义后>
package Practice; public class ExtendsPractice { public static void main(String[] args) { Animal animal=new Animal(); animal.setAge(11); Cat cat=new Cat(); cat.age=10; cat.printAge(); cat.printEat(); } } class Animal{ int age=111; public void setAge(int age) { this.age = age; } public void eat(){ System.out.println("动物吃饭"); } } class Cat extends Animal{ int age; public void printAge(){ System.out.println("cat's age="+this.age+" animal's age="+super.age); } public void eat(){ System.out.println("猫吃饭"); } public void printEat(){ this.eat(); super.eat(); } }
结果
cat's age=10 animal's age=111 猫吃饭 动物吃饭 Process finished with exit code 0
<未定义的话>
package Practice; public class ExtendsPractice { public static void main(String[] args) { Animal animal=new Animal(); animal.setAge(11); Cat cat=new Cat(); cat.age=10; cat.printAge(); cat.printEat(); } } class Animal{ int age=111; public void setAge(int age) { this.age = age; } public void eat(){ System.out.println("动物吃饭"); } } class Cat extends Animal{ // int age; public void printAge(){ System.out.println("cat's age="+this.age+" animal's age="+super.age); } public void eat(){ System.out.println("猫吃饭"); } public void printEat(){ this.eat(); super.eat(); } }
结果
cat's age=10 animal's age=10 猫吃饭 动物吃饭 Process finished with exit code 0
(2):Animal类中的age通过直接赋值和通过set方法初始化
<通过set方法>
package Practice; public class ExtendsPractice { public static void main(String[] args) { Animal animal=new Animal(); animal.setAge(111); System.out.println("动物的年纪是"+animal.age); Cat cat=new Cat(); cat.age=10; cat.printAge(); cat.printEat(); } } class Animal{ int age; public void setAge(int age) { this.age = age; } public void eat(){ System.out.println("动物吃饭"); } } class Cat extends Animal{ int age; public void printAge(){ System.out.println("cat's age="+this.age+" animal's age="+super.age); } public void eat(){ System.out.println("猫吃饭"); } public void printEat(){ this.eat(); super.eat(); } }
结果
动物的年纪是111 cat's age=10 animal's age=0 猫吃饭 动物吃饭 Process finished with exit code 0
<直接赋值>
package Practice; public class ExtendsPractice { public static void main(String[] args) { Animal animal=new Animal(); animal.setAge(111); System.out.println("动物的年纪是"+animal.age); Cat cat=new Cat(); cat.age=10; cat.printAge(); cat.printEat(); } } class Animal{ int age=11; public void setAge(int age) { this.age = age; } public void eat(){ System.out.println("动物吃饭"); } } class Cat extends Animal{ int age; public void printAge(){ System.out.println("cat's age="+this.age+" animal's age="+super.age); } public void eat(){ System.out.println("猫吃饭"); } public void printEat(){ this.eat(); super.eat(); } }
结果
动物的年纪是111 cat's age=10 animal's age=11 猫吃饭 动物吃饭 Process finished with exit code 0
***************************************************************** ******************************************** ************************** 整个过程发现的比较有意思的情况是 直接赋值的同时,set方法也赋值(如三条横线上面的那个例子) <如果只有直接赋值的话> ```java package Practice; public class ExtendsPractice { public static void main(String[] args) { Animal animal=new Animal(); // animal.setAge(111); System.out.println("动物的年纪是"+animal.age); Cat cat=new Cat(); cat.age=10; cat.printAge(); cat.printEat(); } } class Animal{ int age=11; public void setAge(int age) { this.age = age; } public void eat(){ System.out.println("动物吃饭"); } } class Cat extends Animal{ int age; public void printAge(){ System.out.println("cat's age="+this.age+" animal's age="+super.age); } public void eat(){ System.out.println("猫吃饭"); } public void printEat(){ this.eat(); super.eat(); } }
结果
动物的年纪是11 cat's age=10 animal's age=11 猫吃饭 动物吃饭 Process finished with exit code 02:调用构造器
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)