一、什么是继承?
1.继承表示类与类之间的关系
2.是由当前类创建出新类的一种机制
现有的类被称为-----父类
创建的新类被称为------子类
二、如何完成一个类的继承
使用关键字extends完成一个类的继承
格式:public class 子类名称 extends 父类名称{ }
注意:1.一个类只能继承一个父类
2.如果一个类没有使用extends继承,那么该类会默认继承java.lang.Object类,因为Object是对象的意思,所以所有的java类都是java.lang.Object类的子类。[一切皆对象]
三、子类对象创建过程
1.子类对象再创建的时候,默认会先调用父类的无参数的构造方法
super() 在子类的构造方法中表示,调用父类无参数的构造方法
2.当父类中没有无参数的构造方法,在子类的构造方法中的第一句使用super(参数)
super(参数)在子类的构造方法中表示,调用父类有参数的构造方法
总结:子类在创建对象的时候,总是先调用父类的构造方法
public class JiChengClass {
//创建一个无参数的构造方法
public JiChengClass(){
System.out.println("我是父类无参数的构造方法");
}
//定义一个有参数的构造方法
public JiChengClass(int age){
System.out.println("我是父类有参数的构造方法,我的参数是:"+age);
}
}
public class SonClass extends JiChengClass {
//继承是子类继承父类中的一些元素
//通过extends关键字来实现 格式 public class 子类名称 extends 父类名称
//注意:1.一个子类只能继承一个父类;
// 2.如果没有使用extends,那么这个类会默认继承java.long.Object类
//子类创建的过程
//子类在继承时,会默认继承父类的无参数构造方法
//在子类中显示调用父类的构造方法,用super(),如果没有参数,则表示调用无参数的构造方法
//当父类中没有了无参数的构造方法时,在子类的构造方法中的第一句使用super(参数)
public SonClass(){
super(25);//这句话必须写在构造函数的第一句话中
System.out.println("我是子类的构造方法");
}
}
public class TestMain {
public static void main(String[] args) {
//创建SonClass类的对象
SonClass sonClass=new SonClass();
}
}
四、什么是Java中的包?Java包的作用是什么?
Java中的包是指Java的程序包,用来保管Java的源码,Java有其下作用:
1.整理Java类,方便管理和维护java类或java接口
2.可以区分名称相同的java类
五、Java包的具体用法
包的基本格式:公司域名倒置.项目.功能
跨包使用java元素时:有两种导包方式
1.import 包名称.* ------- 导入所有
2.import 包名称.类名称 -------- 导入指定包的指定类
注意:1.包名称中不能包含大写字母
2.包名称中不能出现汉字
3.java.lang中的元素使用时,不需要导包,系统会默认导包
六、Java中的访问修饰符的区别和用法
访问修饰符: public 缺省 protected [受保护的] private [私有的]
类中只有两种修饰符:public 修饰的java类,在任何地方都可以使用
缺省 修饰的java类,只能在本包中的类使用
变量和方法可以有四种修饰符: public 缺省 protected [受保护的] private [私有的]
修饰符 | 同一个类中 | 同一个包中非子类 (需要对象访问) | 同一个包中子类 | 不同包中子类 | 不同包中非子类 (需要对象访问) |
public | yes | yes | yes | yes | yes |
protected | yes | yes | yes | yes | no |
缺省的 | yes | yes | yes | no | no |
private | yes | no | no | no | no |
Java中子类的继承性
子类的继承性指得到是,子类可以从父类继承到那些元素,不能继承到那些元素,与java元素的访问限制修饰符有关
1.同一个包中的子类可以继承public,缺省的,protecte修饰的变量和方法
2.不同包中的子类可以继承public,protecte修饰的变量和方法
3.子类中的元素有些是从父类继承,有些是原本就属于子类自己的。
七、方法重写
方法重写--子类中某个方法与继承自父类的方法一样,这种现象就是子类重写了父类的方法
public class Person {
public void method(){
System.out.println("Person类的public方法");
}
}
public class Student extends Person{
//子类Student继承并重写了父类Person的method方法
public void method(){
System.out.println("Student类的public方法");
}
}
public class TestMain{
public static void Main(String args[]){
Student stu1=new Student();
stu1.method();
}
}
//运行结果:
//Student类的public方法
方法重写与方法重载的区别:
方法重载--同一个类中方法名称相同,参数不同
方法重写--子类中的方法与父类中继承来的方法相同
八、成员变量的隐藏
成员变量隐藏有两种含义:
1.同一个类中局部变量与成员变量名称相同,此时成员变量会被隐藏,使用局部变量的值,若想强制调用成员变量的值,需要this.变量名
2.子类中的成员变量如果与从父类继承来的成员变量名称相同,则也会出现成员变量隐藏,此时会使用子类中成员变量的值,若想强制调用从父类中继承的成员变量的值,则需要super.变量名
package com.wangxing.homework.test7;
/*成员变量的隐藏
有两种含义:
1.在同一个类中,成员变量和局部变量名称相同,会隐藏成员变量,值为局部变量,想调用成员变量,用this.
2.子类中的某个成员变量和父类中的某个成员变量名称相同,会隐藏父类中的成员变量,进而使用子类中的变量值
要想使用父类继承来的成员变量,用super.
*/
public class ChengYuanClass {
public int id =238;
public void chengYuanTest(){
String id = "学号";
System.out.println("在同一个类中成员变量的隐藏,其结果为局部变量的值==="+id);
System.out.println("在同一个类中成员变量的隐藏,调用成员变量==="+this.id);
}
}
package com.wangxing.homework.test7;
public class ChengYuanSonClass extends ChengYuanClass {
public int id = 3233332;
public void test(){
System.out.println("子类中成员变量的隐藏,其结果为==="+id);
System.out.println("子类中成员变量隐藏,调用从父类继承来的成员变量,结果为==="+super.id);
}
}
package com.wangxing.homework.test7;
public class TestMain {
public static void main(String[] args) {
//创建ChengYuanSonClass类的对象
ChengYuanSonClass chengYuanSonClass = new ChengYuanSonClass();
chengYuanSonClass.test();
chengYuanSonClass.chengYuanTest();
}
}
/*
结果为:
子类中成员变量的隐藏,其结果为===3233332
子类中成员变量隐藏,调用从父类继承来的成员变量,结果为===238
在同一个类中成员变量的隐藏,其结果为局部变量的值===学号
在同一个类中成员变量的隐藏,调用成员变量===238
*/