---------------------- android培训、java培训、期待与您交流! ----------------------
类的设计分析
访问修饰符:
private (私有 不能继承)私有类 本类内部可以访问,但是不能被继承
default (类内部和同一个包中使用)什么都不写,包 访问权限:本类内部可以访问,同包其他类可以访问,同包其他类可以继承
protected (可以在类中包中以及子类中被用到)子类访问权限:本类内部可以访问,不同包的子类也可以访问,同包其他类也可以访问,能继承到子类
public 公共访问权限:(所有都地方都可以)任何地方都可以访问,能集成到子类
类的设计分析
1 根据要求写出类所包含的字段
2 所有的字段都必须私有化
3 封装之后的字段可以通过setter和getter设值和取得
4 按照需求可添加若干构造方法
5 根据需求可添加相应的方法
6 类中的所有方法都不要直接处理(输出),而是交给调用者去处理
面向对象--------继承
继承是一种从一般到特殊的类,简单地说就是完全包含所要继承的类的全部或部分功能,加以完善
特点:
1 提高代码的复用性
2 让类与类之间产生关系,有了这个继承关系才有了多态的特性
3 java语言中只支持单继承(有别于c语言)
因为多继承容易带来安全隐患(父类多了,功能相同的话,就会出现调用不确定性,到底复写的谁的)
java解决多继承采用接口的方式处理
4 java支持多多层继承,object是每个类的超类,实现数形结构
继承是多态的前提
对类而言,只支持单继承
格式
[修饰符] class SubClass extends SuperClass
按照这种关系,我们把SuperClass类称为父类或者基类,把SubClass
称为子类或派生类或拓展类
总结:
java.lang.Object 是所有类的父类
Objec要么是直接父类要么是间接父类
例如把人的共性写在Preson类里,将每个人的特性写在不同的人,也就是单独扩展Preson类即可
总结:
子类与父类的关系----
子类扩展父类
主要是以父类为基础,然后添加自己的属性字段和方法
父类的私有成员子类不能继承到;父类的构造方法不能被继承
java只支持单继承,不支持多继承
一个类有且只有一个直接父类
一个类没显示的继承其他一个类的时候,默认的直接父类就是Object类
Student的直接父类是 Person,Object类也是Student类的父类,但是是间接父类;
一旦一个类显示的继承了其他的一个类的时候,此时默认的直接父类Object就会被取消;
java里一个类只能有一个直接父类;java.lang.Object是所有类的父类或间接父类
子类对象实例化过程
在继承操作中对子类对象的实例化:
子类对象在实例化之前必须首先调用父类中的构造方法之后再调用自身的方法
子类访问父类和方法覆写
子类不能直接访问父类私有成员
子类可以调用父类中的非私有方法来间接访问父类私有成员
Preson类中有私有字段name,Student继承Person
new Student().name; 这种写法是错误的
new Student().getName;正确
子类拓展子类——子类是父类的一种特殊情况
主要是以父类为基础,然后添加属于自己的字段和方法
方法覆写产生的原因:
当父类中某个方法不适于子类时,子类出现父类一模一样的方法。
判断必杀技:子类方法前加上@Override能编译通过,表明是方法的覆写。
调用被覆盖的父类方法:使用super.方法名(实参);
方法覆写时应遵循的原则(一同两小一大);
一同:方法签名必须相同
两小:子类方法的返回值类型比父类方法的返回值类型更小或相等
子类方法声明抛出的异常应比父类方法声明抛出的异常更小或相等
一大:子类方法的访问权限应比父类方法更大或相等
子类需要覆写父类方法
当父类的某个方法不适合于子类本省的特征行为时就当覆写父类中应当改变的方法
super关键字和调用父类构造方法
1 表示父类对象的默认引用
2 如果子类要调用父类被覆盖的实例方法,可以用super作为调用父类被覆盖的实例方法
3 使用super调用父类方法
4 使用super调用父类的构造方法
调用构造方法
本类中调用另一个重载构造方法用this(参数列表)
子类构造方法调用父类构造方法用super(参数列表)
子类调用父类的构造方法时:
super必须放在第一句
java在执行子类的构造方法前会先调用父类无参的构造方法,其目的是为了
对继承自父类的成员做初始化操作
子类在创建对象的时候,默认调用父类的无参构造方法,要是子类构造方法中
显示指定调用父类其他构造方法,就调用指定的父类构造方法,取消调用父类无参构造方法。
package com.itheima;
//涉及到 类的构造方法 显示类 隐式类 类的继承 以及类的调用
class A{//构造一个A类
String name;
A(){
System.out.println("父类默认隐式的构造方法");
}
A(String name){
System.out.println("父类显示的构造方法");
}
}
class B extends A{//B类继承A类 子类默认隐式内容 也可以指定 extends A(zhangs){}
B(){
super(null);//使用super 指定父类赋值为空 这样父类调用了隐式A方法
System.out.print("子类默认隐式的构造方法");
}
}
public class Test9910{
public static void main(String[] args){
new B();
}
}