继承泛解
继承包含的基本知识点
所有类直接或间接地继承 object 类。
在这里先广泛的学习了解一下,看不懂没关系,笼统的过一遍,在下面会详细讲解。
public class Son extends Father {
int age= 10;
public void show(){
int age = 5;
//父类私有成员无法访问
System.out.println(num);
System.out.println("局部 " + age);
System.out.println("本对象 " + this.age);
System.out.println("father " + super.age);
System.out.println("这是子类");
}
public void method(){
super.show();
}
}
class Father extends Object{
int age = 30;
int num = 1;
public void show(){
System.out.println("这是父类");
}
}
class Test {
public static void main(String[] args) {
Son son = new Son();
son.show();
son.method();
}
}
从 m a i n \color{pink}{main} main方法进入, new一个新的子类从 S o n \color{pink}{Son} Son类中,我们发现在子类和父类中都有 s h o w ( ) \color{pink}{show()} show()方法,在调用show() 方法时,根据就近原则,首先调用子类方法。
但是我们想调用父类方法怎么办呢?
在子类中使用关键字 s u p e r \color{pink}{super} super, s u p e r . s h o w ( ) ; \color{pink}{super.show();} super.show(); 这样主函数中就可以调用父类地方法!
继承详解
继承的格式
class 子类 extends 父类{
}
猫狗继承
猫和狗都属于动物,在这里继承了动物类,这是属于最基本的继承。
//父类
class Animal{
public String name;
public int age;
public void eat(){
System.out.println(name+" 正在吃饭");
}
}
//子类
class Dog extends Animal{
public void WangWang(){
System.out.println(name+"正在汪汪");
}
}
//子类
public class cat extends Animal{
public void MiMi(){
System.out.println(name+"正在咪咪");
}
}
public class In {
public static void main(String[] args) {
Dog dog = new Dog();
dog.name = "小狗";
dog.age = 10;
dog.WangWang();
dog.eat();
System.out.println("===========");
cat cat = new cat();
cat.name = "小猫";
cat.age = 2;
cat.MiMi();
cat.eat();
}
}
父类成员的访问
子类中方位父类成员(super)
在父类和子类中都有变量a,要访问父类中的变量a,看一下下面的代码可以,会访问成功吗?
class A{
public int a = 10;
public int b = 20;
public int c= 30;
}
class B extends A{
public int a = 6;
public int d = 35;
public void method(){
System.out.println("a:"+a);
System.out.println("b:"+b);
System.out.println("c:"+c);
System.out.println("d:"+d);
}
}
public class In {
public static void main(String[] args) {
B b = new B();
b.method();
}
}
显然访问失败了。
这时候只需要引入关键字super即可。更新method中的代码
public void method(){
System.out.println("supre.a:"+super.a);
System.out.println("b:"+b);
System.out.println("c:"+c);
System.out.println("d:"+d);
}
子类构造方法
在父类中加入构造方法后,此代码还会正常运行吗?
答;编译都过不了。
//父类
class Animal{
public String name;
public int age;
public Animal(String name){
}
}
//子类
class Dog extends Animal{
}
//子类
class cat extends Animal{
}
public class In {
public static void main(String[] args) {
Dog dog = new Dog();
dog.name = "小狗";
dog.age = 10;
System.out.println("===========");
cat cat = new cat();
cat.name = "小猫";
cat.age = 2;
}
}
直接报错
想一想为什么会这样,加入了一个构造方法就会报错为什么呢?
继承继承,从字面意思理解,子类继承父类,先有父在有子,子类的对象构造时,需要先调用父类的构造方法,需要修改子类的代码。
修改后的子类代码
//父类
class Animal{
public String name;
public int age;
public Animal(String name){
}
}
//子类
class Dog extends Animal{
public Dog(String name){
super(name);
}
}
//子类
class cat extends Animal{
public cat(String name){
super(name);
}
}
public class In {
public static void main(String[] args) {
Dog dog = new Dog("小狗");
dog.age = 10;
System.out.println("===========");
cat cat = new cat("小猫");
cat.age = 2;
}
}
super和this的区别(一张图直接解释,无需定义)
如图,包含的范围不同。
学地不是技术,更是梦想!!!