黑马程序员技术交流社区

标题: 黑马程序员----可爱的关系父与子---继承 [打印本页]

作者: 毕延平    时间: 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.子类只能继承父类非私有的成员(成员属性、成员方法);如果父类提供了getset方法        时,子类可以继承父类的getset方法,间接访问;
        4.父类的构造方法不能被继承;
        5.不要为了部分功能而去继承
        6.当子类和父类是一个:is a(是一个) 的关系时
7.成员变量的读取顺序 : 局部成员 n  -----》子类的成员 this.n--------》父类的成员super.n;
8.方法重写时的注意事项:
        1.父类中私有的方法不能被重写;
        2.子类重写父类的方法时,访问修饰符一定跟父类的访问修饰符相同或比父类更宽;
                private(私有) , 默认(不指定)protected(受保护的)public(公有的)
        3.父类静态方法,子类也必须通过静态方法进行重写。
()thissuper关键字:
        一.成员变量:
                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