构造器详解与构造器重载
构造器详解:
构造器规则:
- 构造器用于初始化对象
- 构造器如何调用?必须用new来调用构造器,这样就可以返回一个初始化完成的对象
- 如果你不为一个类提供构造器,系统就会自动为该类提供无参数的构造器
构造器重载:
一个类中可以定义多个构造器(因此构造器名必然相同),必须要求形参列表不同——这就是构造器重载。
this引用:
this紧跟一个 .
this.name;
this.walk();
this调用:
this紧跟圆括号。
this(参数);
this调用代表调用同一个类中重载的构造器——this调用只能出现在【构造器】的【第一行!】
public class Dog {
private String name;
private String color;
private int age;
//下面两个就是构造器重载
public Dog(String name,String color)
{
this.name ="我的名字是:" + name;
this.color = color;
}
public Dog(String name,String color,int age)
{
// this.name = "我的名字是:" +name;
// this.color = color;
//调用重载的构造器,到底调用哪个构造器,取决于传入的参数
// this(name,color); //尝试调用(String, String)构造器
// this(name, 20); //(报错)尝试调用(String , int)构造器(没有这个构造器)
// this("456"); //(报错)尝试调用(String)构造器
this("小黄","黄色"); //尝试调用(String, String)构造器
this.age = age;
}
//name的setter和getter方法
public void setName(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
//color的setter和getter方法
public void setColor(String color) {
this.color = color;
}
public String getColor() {
return this.color;
}
//age的setter和getter方法
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
public class DogTest {
public static void main(String[] args) {
Dog d = new Dog("旺财","白色",3);
System.out.println(d.getName());
System.out.println(d.getColor());
System.out.println(d.getAge());
}
}
继承:
封装、继承、多态——面向对象三大特征。
理解继承
苹果类继承了水果类
老虎继承了动物
东北虎继承了老虎
Java的继承:是一种“类与类”之间的关系。
是一种“由一般到特殊”的关系,子类是一种特殊的父类。
子类——小类;父类——大类。
子类实例,完全可以当成父类实例来使用!
Java的继承,用的是extends单词,(扩展的)
父类(超类,基类,大类):子类(派生类,小类)
继承语法
[ 修饰符 ] class 类名 extends 父类
{
}
说明:
——Java是单继承,只能有一个直接父类
——如果你不显示继承父类,Java默认是继承Object类(JDK系统提供的类)
【一切都是Object】
【继承的好处:代码复用】
子类继承父类,可以得到父类的:
——成员变量。
——方法。
public class Bird
{
// private String name = "猪";
String name = "小猪";
// fly→(方法名),()括号里为形参
public void fly()
{
System.out.println("猪在天上飞");
}
}
public class Sparrow extends Bird
{
}
public class SparrowTest
{
public static void main(String[] args) {
Sparrow sp = new Sparrow();
//fly方法是继承自父类的。
sp.fly();
System.out.println(sp.name);
sp.name = "龙";
System.out.println(sp.name);
}
}
public class Ostrich extends Bird
{
//重写fly方法
@Override
public void fly()
{
System.out.println("鸵鸟只能跑~~~");
}
}
public class OstrichTest {
public static void main(String[] args)
{
Ostrich os = new Ostrich();
os.fly();
}
}
方法重写(Override)
子类发现父类不适合自己时,就要重写父类的方法。
方法重写口诀:2同2小1大
2同:方法名相同、形参列表相同。
2小:返回值类型相同或更小,声明抛出的异常相同或更小。
1大:访问权限相同或更大。
@Override:
作用是报错
要求被修饰的方法必须重写父类方法,否则就报错。
import java.util.Random;
class Base
{
//Object(是返回值类型),info(是方法名),()(括号里是形参列表)
public Object info ()
{
System.out.println("父类的info");
return new Random();
//为什么要return一个Random?
}
}
public class 方法重写 extends Base
{
@Override
//方法名、形参列表要相同;返回值类型相同或更小
//Object是最大的父类,String 比 Object 更小,所以可以。
public String info()
{
System.out.println("子类的info");
return "卢金鸿";
}
public static void main(String[] args) {
方法重写 fc = new 方法重写();
fc.info();
}
}