Java继承一、继承的概念1 .概念2、简单的继承案例代码1 .格式2 .简单的继承关系3、详细的继承知识整理1 .继承的三种2 .继承的特性3 .继承的关键词`4.改写`5.构建方法6 .父子类间成员
一、继承的概念1 .概念继承是java面向对象编程技术的基础。 这是因为可以创建分层类。 继承是指子类继承父类的特性和行为,从而导致子类的对象(实例)具有父类的实例域和方法,或者子类从父类继承方法,从而导致子类继承父类继承可以理解为,对于已经使用的类,尽量不修改。 建议您定义新类,以便可以重用公共内容,并在新类中添加或更改所需的信息。
子类具有父类的一般特性和独特特性
父类也称为基类、超类
子类为派生类2,简单继承案例代码1.class父类{}class子类extends父类{} 2.也称为简单继承关系
(1)案例分析
讲师、fkdbb都是教师,提取讲师和fkdbb共享的信息作为教师的班级。 讲师班、fkdbb班继承教师班,作为副班。
(2)编码实现
//提取讲师和fkdbb共享的信息,提取教师的父级class Teacher { String name; String sex; //创建讲师班,继承教师班,专有行为(方法)讲义classlecturerextendsteacher (public void lecture ) ) ({ System.out.println )讲师讲义) 创建fkdbb类,继承教师类,专有行为(方法)辅导classassistantextendsteacher (public void coach ) ) system.out.println ) ) fkdbb
2.java语言可以多重继承
3 .一个子类只能有一个父类,但一个父类可以有多个子类
2 .继承的特性(1)子类可以具有父类的非私有属性和方法
(2)子类可以具有自己的属性和方法。 这意味着子类可以扩展父类
(3)子类可以用自己的方法实现父类的方法(重写Override )。
(4)Java的继承为单一继承,但可以多重继承。 这是Java继承区别于c继承的特性。
提高(5)类之间的耦合性(继承的缺点,耦合度高会加强代码之间的联系,降低代码的独立性)。
3 .继承的关键词(1)extends关键字
在Java中,类的继承是单个继承。 这意味着extends只能继承一个类,因为子类只能有一个父类。
java.lang.Object类是所有类的最高公共父类,如果该类没有继承的关键字,则缺省情况下将继承Object类
公共类人员{ string name }; String sex; public void eat { } public void sleep { } { } publicclasstudentextendsperson {//子类不写代码,但具有父类的所有非私有属性和梅
implements关键字允许java具有多继承特性。 如果使用范围是类继承接口,则可以同时继承多个接口。 接口和接口之间请用逗号隔开。
公共接口a {公共void aa (; 公共语音bb (; }公共接口b {公共void aa (; } public class C implements A,B {} (2)implements关键字
使用super关键字提供对引用当前对象的父类的父类成员的访问。
class A{ int a; public void a { } { } classbextendsa { inta; public void a { } public void test { } { this.a=11; //调用自己的成员变量super.a=22调用父类的成员变量this.a (); //调用自己的成员方法的super.a (; //调
用父类的成员方法 }}(4)final关键字
final 关键字声明类可以把类定义为不能继承的,即最终类。
final class 类名{}final 关键字修饰方法,该方法不能被子类重写.
权限修饰符 final 返回值类型 方法名(){} 4.重写(override)重写:override(覆盖、覆写)
在继承中,子类与父类的方法名称一样,参数列表也一样,但是方法体不同,称为方法的重写。
class Fu { public void method(){ System.out.println("这是父类方法"); }}public class gydll extends Fu { //Override注解可以检测重写方法是否符合规范,可以不写但是不推荐 @Override public void method(){ System.out.println("这是子类方法"); }} 5.构造方法1.子类构造方法中默认带有 super()调用父类构造方法,所以一定要先调用父类构造方法,后执行子类构造方法
2.可以通过super关键字在子类调用父类的重载构造
3.父类构造方法的调用必须是子类构造方法的第一条语句,一个子类构造方法只能调用一个父类构造方法
4.只有子类构造方法才能调用父类构造方法
父类、子类的代码 ↓ ↓ ↓
class Fu { public Fu(){ System.out.println("父类无参构造方法"); } public Fu(int num){ this();//使用this关键字调用其它构造方法 System.out.println("父类有参构造方法"); }class gydll extends Fu { public gydll(){ //super();可以不写,编译器默认包含,如果调用了其它构造方法,则默认super()失效 super(20); System.out.println("子类构造方法"); }}【注意】
1.子类构造方法必须继承一个父类构造方法
2.出现了继承关系,编译器默认继承父类构造方法
3.子类默认构造方法和子类中的super()都为隐式(可以不使用super关键字调用)
4. 如果要调用父类其它构造方法则必须使用super关键字调用
5.如果想调用两个父类构造方法,则必须在父类另外一个构造方法中,使用this关键字调用其它构造方法
知识点在注释
public class FieldTest { public static void main(String[] args) { //首先对子类父类创建对象,以供下文比较 Fu f = new Fu();//父类对象 gydll z = new gydll();//子类对象 //使用子类对象和父类对象,都可以输出父类的numFu System.out.println(f.numFu); System.out.println(z.numFu); //但是只能使用子类对象输出numgydll System.out.println(z.numgydll); //如果父子类存在同名变量时//等号左侧是哪个类,就会使用哪个类的成员变量,//如果找不到继续向上(父类)寻找System.out.println(f.num);//输出父类numSystem.out.println(z.num);//输出子类num //父类不会知道谁继承了它,但是子类一定知道继承了谁}} 7.父子类间成员方法的访问子类方法的访问权限必须 大于等于 父类方法的权限修饰符
子类方法的返回值类型必须 小于等于 父类方法的返回值类型
知识点在注释
public class MethodTest { public static void main(String[] args) { gydll z = new gydll();//创建子类对象 z.methodFu();//父类对象访问父类方法 z.methodgydll();//子类对象访问子类方法//使用子类对象访问父子类重名方法时//创建的对象是谁就优先使用谁,找不到就继续向上(父类)寻找 String str = z.method(); //使用的子类对象所以首先寻找子类中的 method() }}