3.重载 over load ing(重载) 英 ['əʊvə'ləʊdɪŋ]
overriding(重写) 英 [ˌəʊvəˈraɪdɪŋ]
超重
load 加载
两个(或多个)函数在同一个类中,他们的函数名一样,参数列表不一样,叫做重载。
注意:仅仅是返回值不同的两个函数,不叫重载。是错误
Duplicate method print(String) in typeMyClass
重复的 方法 类型
4. 继承的基本概念
继承,父类(基类、超类),子类(派生类) extends 扩展继承
Java中一个类只能继承一个父类,了解一下,在C++中,一个类可以继承多个父类。
Superclass 超类java.lang.Object Object是所有类的父类 java.lang是包名lang=language=语言
java.lang这个包比较特殊,使用时不用import
display = print = show = 显示
子类中重写并覆盖父类中的方法。覆盖=重写
函数重载
public void print(String name)
{
System.out.println("你的名字是:"+name);
}
public void pringtln(String name,int age)
{
System.out.println("你的名字是"+name+",年龄"+age);
}
自动调用各个参数
Myclass x=new Myclass();
"张三", 20);
"李四");
子类中重写并覆盖父类中的方法。覆盖=重写
父类的定义
定义了
public class person {
name;
int height;
void display()
{
System.out.println("你的名字:"+name+"你的身高:"+height);
}
}
子类继承父类
public class xueshong extends person{
int score;
void display()
{
System.out.println("你的名字:"+name+"你的身高:"+"你的成绩:"+score);//子类的重写了父类的 再加个score}
重载后和不重载的显示结果
protected String name;
protected int height;
public person()
{
this.name="";
this.height=77;
}
public person(String name,int height)
{
this.name=name;
this.height=height;
}
// //getter 有protected时可以不使用get
// public String getName()
// {
// return name;
// }
// public int getHeight()
//子类可以继承父类中的私有函数,在父类中加get。
// {
// return height;
// }
public void show() //打印方法
{
System.out.println("你的名字:"+name+"你的身高:"+height);
}
}
构造后的结果对比
5.构造函数 constructor
一种特殊的函数,用于初始化对象,在创建对象的时候会被自动调用
默认构造函数,是指没有参数的构造函数,当我们不编写构造函数的时候,系统会自动生成默认构造函数。
1) 函数的名字,必须和类的名字相同。
2) 函数不可以有返回值,但是函数定义的时候不能加void。
public person(String name,int height)
3) 构造函数可以有多个。多个构造函数参数不能相同。
The constructor Person() is undefined
当我们编写了有参数的构 造函数后,系统不会生成默认构造函数。
子类的默认构造函数,默认调用父类的默认构造函数。
初始值构造函数,函数值与类名相同。
public person(String name,int height) //有参的构造函数
{ //模板,也是个类
this.name=name;//谁掉构造函数this就是谁
this.height=height;
}
Person z.=newperson(“zhang”,170);//可以直接传值,掉构不是默认的造函数
6.protected访问修饰符 public private default(默认,friendly) protected,英 [prə'tektɪd]
//子类可以继承父类中的私有函数,在父类中加get。
在子类和本包中可见。可以省略get方法,在外包也可以访问
protected String name;
protected int height;
public person()//无参的构造函数
{
this.name="";
this.height=77;
}
public person(Stringname,int height) //有参的构造函数,不能被默认是调用。
{
this.name=name;
this.height=height;
}
// //getter 使用protected时可以不使用get
// public String getName()
// {
// return name;
// }
// public int getHeight()
// {
// return height;
// }
public void show()
{
System.out.println("你的名字:"+name+"你的身高:"+height);
}
}
public class Jicheng extends person {
private int score;
public Jicheng()
{
score=100;
}
public Jicheng(Stringname,int height,int score)
{
super(name,height);//不使用默认的函数,调用父类中的有惨的函数
this.score=score;
}
调用的是父类中受保护的
不同包中的子类中是否可以访问???
可以的prohibit
Prohibitedpackage name: java 禁止使用java做包名