黑马程序员技术交流社区

标题: 重载、构造、继承 [打印本页]

作者: lilongbin2016    时间: 2016-12-11 13:22
标题: 重载、构造、继承
一、方法重载:在同一个类中,方法名相同,方法的参数个数、类型不同,与方法的返回值类型无关。

1. 同一个类中,多个构造方法的之间的关系构成重载。

2. 默认人情况下,每一个类中都有一个隐藏的无参的构造,如果我们自定义一个构造,系统就不给我们提供无参的构造了。

3. this关键字和this语句(this:是区分成员变量和局部变量的)
this代表什么?   this代表当前类的对象

二、构造代码块语法:{}
构造代码块的作用:给所有的对象进行初始化,所有对象的共性行为都放在构造代码块里面,构造代码块的执行顺序先于构造方法。

三、this语句   语法:  this():
this语句用在什么地方?  主要用于构造方法之间的相互调用。
注意:this语句必须放在当前构造方法的首行。被调用构造一般是私有的(private)。
例如:
public class Person {
String mName;
int mAge;
String mAdress;
//构造代码语块
{
  cry();
}
// 构造方法1
public Person (){   
}
// 构造方法2
private Person (String name) {
  this.mName = name;
}
// 构造方法3
public Person (String name, int age) {
  this(name);// 调用构造方法
  this.mName = name;
  this.mAge = age;
}
// 构造方法4
public Person (String name, int age, String adress) {
  this.mName = name;
  this.mAge = age;
  this.mAdress = adress;
}
//哭方法
public void cry() {
  System.out.println("cry.......");
}
//打印方法
public void show() {
  System.out.println("姓名"+mName+"年龄"+mAge);
}   
public static void main(String[] args) {
  Person b1=new Person ();   
  Person  b2=new Person ("张三");
  Person  b3=new Person ("张三",6);
  Person  b4=new Person ("张三",6,"北京");
}
}

四、继承(关键字extends,super)
1.extends 左侧的类叫子类,右侧的类叫父类。(一个子类只能有一个父类,一个父类可以有多个子类。)
2.Java里面不支持多继承,但是支持多层继承,Object是所有类的基类,(父亲)


3.重写(复写):当子类中的方法和父类中的方法的方法名一致, 返回值类型一致,参数列表(参数类型和参数个数)一致, 那么子类里面的方法就重写了父类的方法了
package com.example.extendsdemo;
如:父类
/**
*YunTuTeacher 这个类里面封装的是从子类中抽取出来的共性的属性和行为
* @author Administrator
*/
public class YunTuTeacher {
    //共有的属性
private String mName;
private int mAge;
private String mSex;
//无参构造方法
public YunTuTeacher(){
}
//构造方法1
public YunTuTeacher(String name){
  this.mName=name;
}
//构造方法2
public YunTuTeacher(String name,int age){
  this.mName=name;
  this.mAge=age;
}
//构造方法3
public YunTuTeacher(String name,int age,String sex){
  this.mName=name;
  this.mAge=age;
  this.mSex=sex;
  show();
}
//共有的行为(授课行为)
public void giveLession(){
System.out.println("知识点讲解");
}
//自我介绍显示信息
public void show(){
System.out.println("名字叫"+mName+",年龄"+mAge+"岁,性别"+mSex);
}
}
子类:
package com.example.extendsdemo;
public class YunTuJavaTeacher extends YunTuTeacher {
     //当前子类里面有一个默认的隐藏的无参构造
  //当前构造方法默认有一个super()语句
  //super()语句是用来引用父类里面无参的构造的
   
    public YunTuJavaTeacher (String name,int age,String sex){          
     super(name,age,sex);          
    }
     //重写父类的方法
       public void giveLession(){
        //调用父类里面的方法
        System.out.println("讲解Java知识点");   
        super.giveLession();   
       }
      
       //重写父类里面的方法
       public void show(){
        super.show();   
       }   
      public static void main(String[] args) {
       //实例化一个子类
       YunTuJavaTeacher yuntuJavaTeacher =new YunTuJavaTeacher("张三",20,"男");
//              yuntuJavaTeacher.giveLession();
//              yuntuJavaTeacher.show();  
}
}
  输出:
名字叫高阳,年龄27岁,性别男   

总结:继承
面向对象的三大特征之一------继承

注: 父类里面成员的权限必须>=子类里面成员的权限

1.什么时候用继承?
当两类事物是is-a(包含)关系适用继承,不要为了实现某一个功能而去随便使用继承,必须是is-a的关系

2.继承的关键字(extends)

3.Java不支持多继承(一个孩子只有一个亲生父亲),但是支持多层继承(一个孩子只有一个亲生父亲,还可以有一个爷爷),支持多实现(一个类可以实现多个接口(interface))

4.super关键字和super()语句的相同点和不同点
a.相同点:都是调用父类的成员(成员变量和成员方法)
b.不同点:super.一般调用的是父类中的成员(成员方法和成员变量)
                 super()语句一般是调用父类里面相应的构造方法,super()语句只能在子类的构造方法里面调用
注意:构造方法可以调用一般方法,一般方法不能调用构造方法(同样适用于父类)。
5.重写和重载的区别
a.重写方法一般用于子父类中,重载方法一般用在同一类中
b.重写:子类中的方法和父类中的方法的方法名一致, 返回值类型一致,参数列表(参数类型和参数个数)一致
  重载:同一个类中同名方法的参数列表不一样即为重载,注意和方法的返回值类型无关
6.this关键字、this语句、super关键字、super语句之间的区别

this:当前类的对象的引用
super:代表当前类父类对象的引用

this()语句和super()语句都是在当前类的构造方法中使用
this()语句代表当前类的构造,super()语句代表当前类的父类的构造
this()语句和super()语句不能出现在同一行,不管是this()语句还是super()语句都必须出现在构造方法的第一行






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2