1.什么是继承?
1.继承表示的是一种类与类之间的关系
2.继承--是由现有的类创建出新类的一种机制。
现有的类---父类【超类】
新类-------子类
2.如何完成一个继承关系?
通过extends关键创建继承关系
格式 : public class NewClass extends OldClass{}
NewClass---子类
OldClass---父类【超类】
注意:1.一个类只能继承一个父类
2.如果一个类没有使用extends,那么这个类默认继承了java.long.Object类
public class Hello{}
public class Hello extends Object{}
public class MyClass extends Hello{}
因为Object是对象的意思,所以所有的java类都是java.long.Object类的子类。
[一切皆对象]
3.子类对象创建过程
1.子类在创建对象的时候,默认先调用父类无参数的构造方法。
2.当父类中没有了无参数的构造方法时,在子类的构造方法中的第一句使用super(参数)
super(参数)在子类的构造方法中表示调用父类有参数的构造方法
super()在子类的构造方法中表示调用父类无参数的构造方法
总结:子类在创建对象的时候,总是先调用父类构造方法。
package com.wanxging.test1;
/**
* 父类
* @author Administrator
*
*/
public class MyPerson {
public MyPerson(){
System.out.println("MyPerson类的无参数构造方法");
}
public MyPerson(String name){
System.out.println("MyPerson类的有参数构造方法");
}
}
package com.wanxging.test1;
/**
* 子类
* @author Administrator
*
*/
public class MyStudent extends MyPerson{
public MyStudent(){
//super(); //在子类的构造方法中表示调用父类无参数的构造方法
super("zhangsan");//在子类的构造方法中表示调用父类有参数的构造方法
System.out.println("MyStudent类的构造方法");
}
}
4.Java中的包是什么?
包指的是java的程序包,保存管理java源代码。
5.Java中包的作用是什么?
1.整理java类/java接口...方便管理和维护
2.可以区分名称相同的java类
6.Java包的具体用法?
创建包:package 包名称;
包名称:可以用一个合法的标识符,也可以使用多个合法的标识符中间"."分割。
包名称的基本格式: 公司域名倒置.项目.功能
例如: com.baidu.map.location
com.wangxing.extendstest.test1
导入程序包:import 包名称.*; //导入所有
import 包名称.类名称; //导入指定包中的指定类
导包位置:创建包的语句与创建类的语句之间
7.java 中的访问限制修饰符的区别和用法?
访问限制修饰符:public 缺省的 protected private
java类--public 缺省的
public修饰的java类可以在任何地方使用。
comwangxing.extendstest.test1 [包1]
MyTest1.java
public class MyTest1 {}
OtherTest1.java
package comwangxing.extendstest.test1;
public class OtherTest1 {
public void testOther(){
MyTest1 t1=new MyTest1();
}
}
comwangxing.extendstest.test2 [包2]
package comwangxing.extendstest.test2;
import comwangxing.extendstest.test1.MyTest1;
public class OtherTest2 {
public void testOther(){
MyTest1 t1=new MyTest1();
}
}
缺省的修饰的java类只能在本包中的类中使用。
comwangxing.extendstest.test1 【包1】
MyTest2.java
class MyTest2 {} 缺省的修饰的java类
OtherTest1.java
package comwangxing.extendstest.test1;
public class OtherTest1 {
public void testOther(){
MyTest2 t2=new MyTest2();
}
}
comwangxing.extendstest.test2 【包2】
package comwangxing.extendstest.test2;
import comwangxing.extendstest.test2.MyTest2;
public class OtherTest2 {
public void testOther(){
//MyTest2 t2=new MyTest2(); //错误
}
}
变量访问限制修饰---public 缺省的 protected private
方法访问限制修饰---public 缺省的 protected private
8.Java中子类的继承性
子类的继承性指的是,子类可以从父类继承到那些元素,不能继承到那些元素
与java元素的访问限制修饰符有关
1.同一个包中的子类可以继承public,缺省的,protecte修饰的变量和方法
2.不同包中的子类可以继承public,protecte修饰的变量和方法
3.子类中的元素有些是从父类继承,有些是原本就属于子类自己的。
9.什么是方法重写?
方法重写--子类中某个方法与继承自父类的方法一样,这种现象就是子类重写了父类的重写。
public class Person {
public void method(){
System.out.println("Person类的public方法");
}
}
package com.wangxing.extendstest.demo3;
public class Student extends Person{
//子类Student继承并重写了父类Person的method方法
public void method(){
System.out.println("Student类的public方法");
}
}
10.方法重载与方法重写的区别
方法重载--同一个类中方法名称相同,参数不同
方法重写--子类中的方法与父类中继承来的方法相同
11.成员变量的隐藏
含义1---同一个类中局部变量与成员变量的名称相同
含义2---子类中某个成员变量的名称与父类中继承来的成员变量的名称相同
package com.wangxing.extendstest.demo3;
public class Person {
public String chengyuan="Person类的成员变量";
}
package com.wangxing.extendstest.demo3;
public class Student extends Person{
//子类Student中的成员变量与从父类继承来的成员变量的名称相同
public char chengyuan='Z';
public void method(){
System.out.println("Student类的public方法");
System.out.println("chengyuan=="+chengyuan); //Z
//强制使用被隐藏的成员变量值,super.成员变量名称
System.out.println("super.chengyuan=="+super.chengyuan);
}
}
12.什么是上转型对象及其基本特征?
上转型对象---子类对象赋值给他的父类变量
子类对象赋值给他的父类变量,此时父类变量认为自己保存的是父类的对象
上转型对象只能访问父类的变量和方法,不能访问子类自己的变量和方法
如果一定要使用上转型对象访问子类自己的变量和方法要将上转型对象强制类型转换成子类对象
低类型 低变量=(低类型)上转型对象
package com.wangxing.extendstest.demo4;
//父类
public class FuClass {
public void testFuLei(){
System.out.println("FuClass类的实例方法");
}
}
package com.wangxing.extendstest.demo4;
//子类
public class SunClass extends FuClass{
//Sunclass类自己的实例方法
public void testSun(){
System.out.println("SunClass类的实例方法");
}
}
package com.wangxing.extendstest.demo4;
public class TestMain {
public static void main(String[] args) {
//上转型对象---子类对象赋值给他的父类变量
//将子类对象转换成了父类对象
FuClass f=new SunClass();
f.testFuLei();//父类的方法
//f.testSun(); //子类的方法
//如果一定要使用上转型对象访问子类自己的变量和方法
//将上转型对象强制类型转换成子类对象
//低类型 低变量=(低类型)上转型对象
SunClass s=(SunClass)f;
s.testSun();
}
}