1.继承体现的是一种父子关系。
2.继承是由一个已有的类创建出新类的机制。【扩展】
已有的类称为父类
新类称为子类
3.继承是面向对象的特征之一。
继承是由一个已有的类【父类】创建出新类【子类】的机制。
首先确保父类的存在。
通过extends关键字实现继承关系
继承格式:
public class 新类 extends 父类{ }
例如:
public class Person{
}
public class Student extends Person{
}
Student---->子类,Person---->父类,Student子类是对Person父类的扩展。
对象创建—>需要依赖于构造方法
子类对象创建需要依赖于子类的构造方法,子类的构造方法会默认调用父类的构造方法【没有父就没有子】
如果一定要强制访问调用父类有参的构造方法,就需要在子类的构造方法第一行通过“super(参数值)”,就可以指定调用父类的任意一个构造方法。
例如:
package com.wangxing.demo1;
public class Person {
public Person() {
System.out.println("父类无参数的构造方法");
}
public Person(String name) {
System.out.println("父类有参数的构造方法--参数name=="+name);
}
}
package com.wangxing.demo1;
public class Student extends Person{
//子类对象创建---需要依赖于子类的构造方法,子类的构造方法中会默认调用父类的构
//造方法【没有父就没有子】,如果一定要强制访问调用父类有参数的构造方法,就需
//要在子类的构造方法中的第一行通过“super(参数值)”,就可以指定调用父类的任意
//一个构造方法。
public Student() {
super(); //父类的无参数构造方法[默认可以省略]
//super("zhangsan"); //父类的有参数构造方法
System.out.println("子类Student的无参数构造方法");
}
}
package com.wangxing.demo1;
public class Test1 {
public static void main(String[] args) {
new Student();
}
}
运行结果:
package关键字+【空格】+包名; [首行]
(1)方便管理Java类
(2)区分名称相同的Java类/接口
import 包名+类名/*;【次行】
Java.lang包不需要导入。
Java中有四种权限修饰符,分别是public,protected,default【缺省的/友好的】,private
Java类–public【任何位置,不用担心跨包】/ default【缺省的/友好的】【跨包不能访问】
Java类中的成员变量—>public,protected,default【缺省的/友好的】,private
Java类中的方法—>public,protected,default【缺省的/友好的】,private
public【公共的】/protected【受保护的】/default【缺省的/友好的】/private【私有的】
修饰符 | 同一个类中 | 同一个包中 | 不同包子类 | 不同包非子类 |
---|---|---|---|---|
public | 可以 | 可以 | 可以 | 可以 |
protected | 可以 | 可以 | 可以 | 不可以 |
缺省的 | 可以 | 可以 | 不可以 | 不可以 |
private | 可以 | 不可以 | 不可以 | 不可以 |
1.Java中的类是单继承。
2.同一个包中子类可以继承父类中除过private修饰的变量/方法。
3.不同包中子类可以继承父类中public/protected修饰的变量/方法。
4.子类中的变量和方法,一部分是子类从父类继承的,另一部分是子类自己创建。
1.在同一个类中,局部变量的名称与某一个成员变量的名称相同
2.在子类中的某一个成员变量的名称与父类某一个成员变量的名称相同
例如:
package com.wangxing.test1;
public class Person {
public char name='A';
public void test() {
String name="zhangsan";
System.out.println("name=="+name);
//如果需要强制输出被隐藏的成员变量的值“this”
System.out.println("name=="+this.name);
}
}
package com.wangxing.test1;
public class Student extends Person{
public String name="lisi";
public void testStudent() {
System.out.println("name=="+name);
//如果需要在子类中强制输出被隐藏的成员变量的值“super”
System.out.println("name=="+super.name);
}
}
package com.wangxing.test1;
public class Test1 {
public static void main(String[] args) {
Person person=new Person();
person.test();
Student stu=new Student();
stu.testStudent();
}
}
运行结果:
方法重写:在子类中某一个方法与父类中的某一个方法相同,此时就是子类重写父类的方法。【被子类重写的方法一定是能够被子类继承】
例如:
package com.wangxing.test1;
public class Person {
public void info() {
System.out.println("父类Person的实例方法");
}
}
package com.wangxing.test1;
public class Student extends Person{
public void info() {
System.out.println("子类Student类重写父类的info实例方法");
//如果强制使用被重写的父类方法
super.info();
}
}
package com.wangxing.test1;
public class TestMain {
public static void main(String[] args) {
Student stu=new Student();
stu.info();
}
}
运行结果:
方法重载 | 方法重写 |
---|---|
同一个类中 | 子类中 |
方法名称相同 | 方法名称相同 |
方法参数不同 | 方法参数相同 |
与方法返回值类型无关 | 方法返回值类型相同 |
强制使用被重写的父类方法super.方法 |