20160718 继承

来源:互联网 发布:淘宝店铺的客服电话 编辑:程序博客网 时间:2024/06/02 01:03
/*  单列设计模式:保证类在内存中只有一个对象  如何保证只有一个对象?  1.不能让其他类来创建对象(通常私有化构造函数)  2.在本类中创建好一个对象,对象也是私有化  3.向外提供一个公共的访问方法*///第一种:饿汉模式,类加载的时候就创建对象classStudent{private Student(){    }private static Student student=new student();//对象public static Student getStudent()//成员方法{return this.student;}//私有化了构造函数//new Student().getStudent();不能调用//可以通过类名调用Student.getStudent();但前提条件是 static}//第二种:懒汉式 ,需要对象的时候才创建   class Student      { private Student(){} private Student student=null;//指向的对象是唯一的,但对象的内容是可以改变的 public static Student getStudent() { if(student==null) {   student=new Student;     } return this.student;     } }class  SingleDemon1{public static void main(String[] args) {System.out.println("Hello World!");}}/*  总结:  一.返回值类型   int ,int[],Student(引用类型),    如何确定一个方法我要返回什么类型?让一个方法有什么参数?需求:根据学生的sid(唯一标识),查询学生信息参数:sid返回值:学生.*/    class Student{String sid;String name;public void(){}}//根据学生的sid查询学生信息public Student getStudentBySid(String sid){//查询数据库获取学生对象return student;}/*需求:查询所有学生参数:未知返回值:Student[]*/public Student[] getStudentList(){//查询数据库库中所有的学生return Student[];}//二.getname()  setAge(int age)//方法名称不是必须要这么写,这是命名规范   //三.静态 和 非静态   //静态成员变量,类加载的时候就初始化,优先于对象的存在   //创建对象去调用;   // 或 类.静态成员变量
********************************************************************************
<pre name="code" class="java">/*  继承  1.概述:*/class A{String name;int age;public void show(){ System.out.println("hello");    }}class B{String name;int age;public void show(){  System.out.println("hello");    }   public void show()   {      System.out.println("生活 你好吗?");       }}/*有没有一种可以将A和B连接在一起 然后将它们之间共同的代码抽出来有一个类C A和B继承C,那么A有着和C一样的代码,B有着和C一样的代码*/class C{private String name;//私有化int age;public void show(){System.out.println("hello");    }}//AB如何继承C?格式?class A extends C{}class B extends C{   public void show()   {      System.out.println("生活 你好吗?");       }}/*  总结:  1.C称之为父类/超类/基类,(被继承的类)  2.继承的类AB称之为子类/扩展类  3.子类在继承父类,子类可以拥有父类中非私有的所有的成员  为什么要使用继承?  1.提高了代码的复用  2.让类与类之间产生了关系,提供了多态的前提*/class Demon2 {public static void main(String[] args) {System.out.println("Hello World!");}}

************************************************************************************
<pre name="code" class="java">/*继承例子学生类  学号,姓名,年龄  吃饭,睡觉教师类   教师编号,姓名,年龄   吃饭,睡觉,学习*/class Person{String name;int age;    public void eat(){System.out.println("吃饭");    }    public void sleep(){System.out.println("睡觉");    }}class Student extends Person{String sid;    }class Teacher extends Person{String tid;public void study(){System.out.println("老师学习");    }}class Demon4 {public static void main(String[] args) {     //创建父类 Person p=new Person(); p.eat(); p.sleep(); //p.study();//父类不能访问子类的方法 //学生子类 Student s=new Student(); s.eat(); s.sleep(); //老师子类 Teacher t=new Teacher(); t.eat(); t.sleep(); t.study();}}

**************************************************************************
<pre name="code" class="java">/*  继承中的成员变量   总结:  1.子类继承父类成员变量 成员属性不一致必定继承    2.子类父类 成员变量名相同  获取本类成员变量的值    如果方法中包含有同名的变量名称,获取的是局部变量.(就近原则)  3.如何获取父类成员,子类成员和局部成员?(成员变量名称一致的情况下)    使用super关键字,和this概念是一致的*/class Father{int num1=2;//①父类}class Son extends Father{int num2=5;int num1=10;//②本类public void show(){   int num1=20;//③本方法           System.out.println("num1="+num1);//=③   System.out.println("num1="+this.num1);//=②获取当前类的变量  System.out.println("num1="+super.num1);//=①   System.out.println("num2="+num2);    }}class  Demon5{public static void main(String[] args) {Son s=new Son();s.show();}}

*****************************************************************************
<pre name="code" class="java">/*   继承中的成员方法   1.方法名不同  子类直接继承父类中的非私有的方法   2.方法名相同     重写:子类方法名与父类方法名完全一致  简单解释就是重新复写父类继承下来的方法  条件:1.两个方法不是同一个类中       2.方法名称一致   3.重写的方法权限不能低于被重写的方法权限   4.方法的参数类型一致    重载:1.方法名称一致     2.返回类型一致 3.权限一致 4.参数不一致 5.两个方法在同一类中    在子类的重写方法中如何调用父类的方法super.方法();静态的方法只能重写静态方法*/class Father{private void show()//这是私有化的函数,子类无法继承{System.out.println("父类打印");    }    public void show1(){System.out.println("父类打印1");    }    public static void say(){  System.out.println("父类说话");    }}class Son extends Father{//定义一个和父类一致的show()方法public void show1(){//需要调用父类的show1()super.show1();System.out.println("子类的打印方法");    }public void show2(){         System.out.println("子类自己的方法");    }    //方法名和show1一致,但是参数不一致    public void show1(String name) {   System.out.println(name+"子类的另一个打印方法");     }    public static void say(){System.out.println("子类说话");    }}class Demon6 {public static void main(String[] args) {Son son=new Son();//son.show();son.show1();son.show2();son.show1("斯特恩");son.say();}}

**************************************************************************
<pre name="code" class="java">/*  继承中的构造函数  默认有一个空参数构造函数  子类中默认会有一个super();这行代码  问题:为什么要这么做?       因为子类要继承父类中的成员,那么父类是不是应该先初始化  总结:  this和super有什么区别?  this.成员变量 调用的是本类的成员变量  super.成员变量 调用的是父类的成员变量  this()  调用的是本类的构造函数  super() 调用的是父类的构造函数  this(参数) 调用的是本类的有參构造函数  super(参数) 调用的是父类的有參构造函数  如果父类没有空参构造函数?  那么子类必须调用this(参数) 或 super(参数) 有参数的构造函数才能开始初始化*/class Father{Father(String name){System.out.println(name+"父类的null构造函数");    }    Father(int num) {           System.out.println(num+"父类的参数构造函数");     }}class Son extends Father{Son()//当22行不赋值20时,Demon7.java:19: 错误: 递归构造器调用{  super(110);  //this(20); // super();  System.out.println("子类的null参数构造函数");    }       Son(int num){this();//super("萧华"); //this(12);Demon7.java:50: 错误: 对this的调用必须是构造器中的第一个语句  System.out.println(num+"子类有參构造函数");    }}class Demon7 {public static void main(String[] args) {//Father f=new Father();System.out.println("******************");Son s=new Son();}}

********************************************************************************************

0 0