做网站的技术支持,做网站的素材包含哪些,专门做牛肉的网站,环江住房和城乡建设部网站继承:
概述#xff1a;当多个类中存在相同属性和行为时#xff0c;将这些相同的内容抽取到单独一个类中#xff0c;那么多个类无需再定义这些属性和行为#xff0c;只要继承抽离出来的这个类即可。
子类#xff1a;当某个类继承了另一个类的时候#xff0c;可以把这个某…继承:
概述当多个类中存在相同属性和行为时将这些相同的内容抽取到单独一个类中那么多个类无需再定义这些属性和行为只要继承抽离出来的这个类即可。
子类当某个类继承了另一个类的时候可以把这个某类称为子类。
父类当某个类被继承时这个被继承的类可以称为父类也称为超类或基类。
定义子类继承父类的属性或行为使得子类对象具有父类的相同的属性或行为子类可以直接访问父类中的私有属性和行为。
继承的优点代码重复利用类与类存在关系是多态的前提。
// 1.定义一个父类FatherClass类定义父类跟定义普通的类没有任何区别如
public class FatherClass{// 定义父类中的方法和属性String FatherStr1 这是FatherClass父类中的FatherStr1;public static void FatherMethods(){System.out.println(父类FacherClass中的FatherMethods方法执行了);}// 定义与子类重名的属性和方法String SameProp 这是父类中子类和父类中重名都有的属性SameProp;public static void SameMethods(){System.out.println(这是父类中子类和父类中重名都有的方法SameMethods);};// 6-2通过方法访问成员变量或成员方法的情况public void msf(){System.out.println(SameProp);//这是父类中子类和父类中重名都有的属性SameProp SameMethods();//这是父类中子类和父类中重名都有的方法SameMethods// 访问子类中不同名的属性或方法// System.out.println(name2);//FatherClass.java:22: 错误: 找不到符号System.out.println(name2)中name2;// method2();//错误: 找不到符号method2()中method2;}// 定义不同名属性和方法供子类mss方法访问String name1 父类中name1;public static void method1(){System.out.println(父类中的method1);}// 7-2:当局部变量和子类中成员变量及父类中成员变量同时重名时的访问规则String threeSameStrs 父类中的threeSameStrs;
}// 2.定义一个继承了FatherClass类的子类SonClass子类的定义需要使用关键字:extends,如
public class SonClass extends FatherClass{//定义子类的基本格式public class 子类名 extends 父类名{}// 定义子类中的方法和属性String SonStr1 这是子类SonClass中的SonStr1;public static void SonMethods(){System.out.println(子类SonClass中的SonMethods方法执行了);} // 定义与父类重名的属性和方法String SameProp 这是子类中子类和父类中重名都有的属性SameProp;public static void SameMethods(){System.out.println(这是子类中子类和父类中重名都有的方法SameMethods);};// 6-2通过方法访问成员变量或成员方法的情况public void mss(){System.out.println(SameProp);//这是子类中子类和父类中重名都有的属性SameProp SameMethods();//这是子类中子类和父类中重名都有的方法SameMethods// 访问父类中不同名的属性或方法System.out.println(name1);//父类中name1method1();//父类中的method1}// 定义不同名属性和方法供父类msf方法访问String name2 子类中name2;public static void method2(){System.out.println(子类中的method2);}// 7-1:当局部变量和子类中成员变量及父类中成员变量同时重名时的访问规则String threeSameStrs 子类中的threeSameStrs;public void threeSameStr(){String threeSameStrs 局部变量中的threeSameStrs; System.out.println(threeSameStrs);//局部变量中的threeSameStrsSystem.out.println(this.threeSameStrs);//子类中的threeSameStrsSystem.out.println(super.threeSameStrs);//父类中的threeSameStrs// 访问局部变量直接写访问本类中变量通过this.变量名访问父类中的变量通过super.变量名;}
}// 3.定义一个TestSonObj类用于测试继承关系中子类访问父类中的属性或方法
public class TestSonObj{public static void main(String[] args){// 4-1使用子类SonClass类创建一个对象sonObj,如SonClass sonObj new SonClass();// 4-2通过子类SonClass定义的sonObj对象调用父类FatherClass中的成员变量和方法如System.out.println(sonObj.FatherStr1);//这是FatherClass父类中的FatherStr1sonObj.FatherMethods();//父类FacherClass中的FatherMethods方法执行了//虽然子类中没有定义以上两个方法和变量但是通过继承可以将父类中的属性或行为继承到子类中子类可以定义多个来继承父类这样可以节省很多公共代码。// 4-3:访问子类和父类重名的属性和方法// 直接通过.的方式访问System.out.println(sonObj.SameProp);//这是子类中子类和父类中重名都有的属性SamePropsonObj.SameMethods();//这是子类中子类和父类中重名都有的方法SameMethods// 创建一个FatherClass类对象fo,用来测试重名属性和方法FatherClass fo new FatherClass();System.out.println(fo.SameProp);//这是父类中子类和父类中重名都有的属性SamePropfo.SameMethods();//这是父类中子类和父类中重名都有的方法SameMethods// 对于子类和父类中重名的属性和方法直接通过对象.点出属性或方法时点.左边对象是用谁创建的就用访问谁的重名方法或属性//间接通过方法访问成员变量或成员方法的情况sonObj.mss();// 对于子类和父类中重名的属性或方法通过方法间接访问时各自访问的是自己本身的属性或方法// 对于子类和父类中不重名且本类中没有的属性或方法通过方法间接访问时子类会向父类中查找没有则会报错而对于父类而言不会像子类查找本类没有则直接报错// 7-3:当局部变量和子类中成员变量及父类中成员变量同时重名时的访问规则sonObj.threeSameStr();// 访问局部变量直接写访问本类中变量通过this.变量名访问父类中的变量通过super.变量名;}
}// 5.定义一个TestFatherObj类用于测试继承关系中是否有父类访问子类中的属性或方法的关系
public class TestFatherObj{public static void main(String[] args){// 6-1使用父类FatherClass类创建一个fatherObj对象FatherClass fatherObj new FatherClass();// System.out.println(fatherObj.SonStr1);//TestFatherObj.java:5: 错误: 找不到符号System.out.println(fatherObj.SonStr1)中SonStr1;// fatherObj.SonMethods();//TestFatherObj.java:7: 错误: 找不到符号:fatherObj.SonMethods()中的SonMethods;// 父类是无法访问子类中的属性和方法的也就是说继承中没有父类访问子类中的属性或方法的关系。// 6-2:访问子类和父类重名的属性和方法// 直接通过点访问属性或方法的情况System.out.println(fatherObj.SameProp);//这是父类中子类和父类中重名都有的属性SamePropfatherObj.SameMethods();//这是父类中子类和父类中重名都有的方法SameMethods// 创建一个SonClass类对象so,用来测试重名属性和方法SonClass so new SonClass();System.out.println(so.SameProp);//这是子类中子类和父类中重名都有的属性SamePropso.SameMethods();//这是子类中子类和父类中重名都有的方法SameMethods// 对于子类和父类中重名的属性和方法直接通过对象.点出属性或方法时点.左边对象是用谁创建的就用访问谁的重名方法或属性//间接通过方法访问成员变量或成员方法的情况fatherObj.msf();// 对于子类和父类中重名的属性或方法通过方法间接访问时各自访问的是自己本身的属性或方法// 对于子类和父类中不重名且本类中没有的属性或方法通过方法间接访问时子类会向父类中查找没有则会报错而对于父类而言不会像子类查找本类没有则直接报错}
}成员方法重写
子类和父类中出现重名且方法参数一致的成员方法时这种情况称为方法重写也叫方法覆盖方法覆写与方法重载需区别重载是方法名相同但是方法参数列表不同。
注解Override
Override用于检测是否存在方法重写其使用规则为在定义方法时在public上一行直接写Override注意后面不能跟标点符号。
public class OverrideFather{public void overRideMethod(){System.out.println(父类中的overRideMethod方法);}// 1-1:方法重写中子类的返回值的范围一定要小于等于父类返回值范围如public Object messages(){return 123;}// 2-1:子类方法的权限修饰符必须大于父类方法的权限修饰符权限修饰符权限大写public protected (default,留空什么也不写) privateObject say(){return hello;}
}public class OverrideSon extends OverrideFather{Overridepublic void overRideMethod(){super.overRideMethod();//父类中的overRideMethod方法System.out.println(子类中的overRideMethod方法);//子类中的overRideMethod方法}// 1-2:方法重写中子类的返回值的范围一定要小于等于父类返回值范围如public String messages(){return 123456;}// 2-1:子类方法的权限修饰符必须大于父类方法的权限修饰符权限修饰符权限大写public protected (default,留空什么也不写) privatepublic Object say(){return hello123;}// 3.子类的构造方法中会默认调用父类的无参构造方法,其是用super()调用// 继承关系中父子类构造方法的访问特点// 3-1 子类构造方法当中有一个默认隐含的“super()”调用所以一定是先调用的父类构造后执行的子类构造。// 3-2 子类构造可以通过super关键字来调用父类重载构造。// 3-3 super的父类构造调用必须是子类构造方法的第一个语句。不能一个子类构造调用多次super构造。// 子类必须调用父类构造方法不写则赠送super()写了则用写的指定的super调用super只能有一个还必须是第一个。public OverrideSon(){//子类构造方法super();//子类无参构造器中默认会调用父类无参构造方法super()调用必须是第一个语句如果构造方法自己写了那么一定要记得调用父类的构造方法使用super()调用即可。}/*总结super关键字的用法有三种1. 在子类的成员方法中访问父类的成员变量super.变量名2. 在子类的成员方法中访问父类的成员方法super.方法名()3. 在子类的构造方法中访问父类的构造方法super()*/// 4.this关键字用来访问本类中的内容用法有三种// 4-1在本类的成员方法中访问本类的成员变量String strthis 123456;public void testThis(){String strthis 123;System.out.println(strthis);//123,访问的为局部变量System.out.println(this.strthis);//123456,访问的为成员变量} // 4-2在本类的成员方法中访问另一个成员方法如this.methods(),这种方式只是起强调作用直接通过方法名()也可以调用:methods();// 4-2:在本类的构造方法中访问另一构造方法如public OverrideSon(){this(String hello);//在本类中的无参构造方法中调用了有参构造方法,这里也必须是构造方法中的第一语句因此它们不能同时使用。}public OverrideSon(String str){};
}public class OverrideSonObj{public static void main(String[] args){OverrideSon orobj new OverrideSon();orobj.overRideMethod();System.out.println(orobj.messages());//123456System.out.println(orobj.say());//hello123// 覆盖重写常用于对老的类的更新但是并非更新原文件而是通过继承和方法重写重新写一个类。}
}java语言继承的特点
1.java语言是单继承的父类只能有一个只能继承一个类但是可以多级继承继承一个继承了某类的类。
2.一个类可以被多个类继承。
提示本文图片等素材来源于网络若有侵权请发邮件至邮箱810665436qq.com联系笔者删除。 笔者苦海