黑马程序员技术交流社区
标题: 黑马程序员----可爱的关系父与子---继承 [打印本页]
作者: 毕延平 时间: 2015-3-8 22:55
标题: 黑马程序员----可爱的关系父与子---继承
http://bbs.itheima.com/thread-3077-1-1.html
Android 培训-----我的java笔记,期待与您的交流;
[size=10.5000pt](一)继承:
继承:
面向对象分析:
学生类:
IOS的学员
安卓的学员
Java基础的学员
JavaEE的学员
教师类:
IOS的教师
安卓的教师
.....
面向对象设计:
class Student{
String name;
int age;
char sex;
String stuNo;//学员编号
}
class Teacher{
String name;
int age;
char sex;
String teaNo;//教师编号
}
class Employee{
String name;
int age;
char sex;
String empNo;//员工编号
}
我们发现这三个类同属于学校的人员,而且,都有一些相同的成员属性,这时我们可以将这些相同的成员属性进步一抽取;形成一个父类,目的:可以重用这三个重复的成员;
继承使用关键字:extends
即:
class Person
{
String name;
int age;
char sex;
}
class Student extends Person{
String stuNo;//学员编号
}
class Teacher extends Person{
String teaNo;//教师编号
}
class Employee extends Person{
String empNo;//员工编号
}
(二)Java继承的特点:
1.一个类,同时只能继承自一个类;即父类只能有一个,而子类可以有多个;
2.但是,允许多级继承;
3.子类只能继承父类非私有的成员(成员属性、成员方法);如果父类提供了get和set方法 时,子类可以继承父类的get和set方法,间接访问;
4.父类的构造方法不能被继承;
5.不要为了部分功能而去继承
6.当子类和父类是一个:is a(是一个) 的关系时
7.成员变量的读取顺序 : 局部成员 n -----》子类的成员 this.n--------》父类的成员super.n;
8.方法重写时的注意事项:
1.父类中私有的方法不能被重写;
2.子类重写父类的方法时,访问修饰符一定跟父类的访问修饰符相同或比父类更宽;
private(私有) , 默认(不指定),protected(受保护的),public(公有的)
3.父类静态方法,子类也必须通过静态方法进行重写。
(三)this和super关键字:
一.成员变量:
this.成员变量:本对象的成员变量
super.成员变量:父类对象的成员变量
二.构造方法:
this():调用其它的构造方法;
语法格式:
1).this([参数列表]);
2).this()一定要放在这个构造方法的第一句话;
super():调用父类的构造方法:
语法格式:
1).super([参数列表]);
2).super()一定要放在这个构造方法的第一句话;
super()调用父类构造函数,一般情况下,由系统自动添加,但如果父类没有默认构造函数,那么,子类中必须显示的使用super()去调用父类带参数的构造函数。以保证JVM能正常的实例化父类对象。在同一个构造器中,super()和this()不能同时存在;
三.成员方法:
this.成员方法():本类的成员方法;
super.成员方法():父类的成员方法;
class A
{
//注意:此类没有默认构造函数
A(int a){
System.out.println("A()");
}
}
class B extends A
{
//此默认构造方法为了演示在B(int a)构造方法中使用this()
B(){
//为了保证正确的调用父类构造函数,这里使用了10
super(10);
}
B(int a){
super(a);
// this();在同一个构造器中,super()和this()不能同时存在;
System.out.println("B()");
}
}
class Student
{
String schoolName;
String name;
int age;
Student(){
schoolName = "好程序班--北京校区";
}
Student(String name,int age){
//在这个构造方法中可以调用其它构造方法
this();//语法
this.name = name;
this.age = age;
}
void printMe(){
System.out.println("schoolName = " + schoolName + ", name = " + name + ", age = " + age);
}
}
class Demo
{
public static void main(String[] args)
{
/* Student stu = new Student();
stu.printMe();
Student stu2 = new Student("章子怡",18);
stu2.printMe();
*/
B b = new B(10);
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |