一:声明一般方法的格式
public static void printStar(int row,int column){
for(int i= 1; i <= row; i++){
for(int j = 1; j <= column; j++){
System.out.print("* ");
}
System.out.println();
}
}
(1)这里是在main方法外声明的一个逐行打印星星的方法
public:代表这是一个公共的方法,类里类外都可以访问。
static:表明这是一个静态的方法,意思是,这个方法只可以访问静态的成员变量或者静态的方法。并且在执行静态的方法时,可以不用创建对象,直接使用:类名.printStar(row,column);,在同一个类中使用静态方法时,可以将类名省略。(方法不一定都是静态的)
void:代表不需要返回值,在这里只是执行一些打印的代码,并不需要返回一些特殊的需要计算的值或者字符。一般在遇到需要或者获取的方法时需要将void改成其他的数据类型。并且添加return。
printStar:代表的是方法的名称。
(int row,int column):代表参数类型和参数名称
方法不用就不执行;
(2)方法的重载
首先,方法的重载要确保方法的名称要一样;
其次,修饰符(public private、static)和返回值类型与方法的重
载无关;
然后参数的类型不能完全一样,至少要保证一个不同,另外,参数的名称也与方法的重载无关。
(无关就是指直接复制粘贴一个方法,再通过改参数的名称,一样还是会报错)
二:构造方法
构造方法作用:给对象的数据(属性)进行初始化赋值
构造方法格式特点:
1.方法名与类名相同(大小也要与类名一致)
2.没有返回值类型,连void都没有
3.没有具体的返回值return
4.构方法分为【有参构造方法】和【无参构造方法】两种
(1)无参的构造方法
public Person(){
name = "叶东宇";
age = 23;
}
在无参的构造方法中,可以直接给成员变量赋值如上面的代码,在调用时,可以直接执行其他的方法,而不用再赋值如:
Person p1 = new Person();
p1.say();
(2)有参的构造方法
public Person(String myName,int myAge){
name = myName;
age = myAge;
}
需要定义参数的类型和名称,在调用时,可以灵活输入自己想要输入的内容:
Person p3 = new Person("东宇",23);
p3.say();
当然,每次都要写一个myName和myAge会很麻烦,因此可以将上面的代码写成:
public Person(String name,int age){
this.name = name;
this.age = age;
}
就是添加this,表明直接指向成员变量。静态方法中不可以添加this。在eclipse中可以直接通过Alt+Shift+S,选择:Generate Constructor using filed来直接构造有参方法。
一般添加了有参的构造方法后(系统不会默认添加无参的构造方法,同样),因此最好自己添加一个无参的构造方法。
当然,即使不添加一个无参的构造方法也可以通过直接赋值来消除错误不添加null,0或者其他的数据会报错:
Student stu2 = new Student(null,0);
(3)给成员变量赋值的三种方法
1直接赋值:通过使用无参的构造方法:(用的少)
对象名.成员变量名 = value
2通过创建set方法
public void setName(String name){
this.name = name;
}
再通过使用set方法
stu2.setName("马化腾");
3通过有参构造方法
public Student(String name,int age ){
this.name = name;
this.age = age;
}
在创建对象时直接使用
Student stu3 = new Student("王健林",45);
(4)继承中的构造方法之间的关系:
子类中所有的构造方法 默认 都会访问父类中空参数的构造方法
因为子类会继承父类中的数据,可能还会使用父类的数据。
所以,子类初始化之前,一定要先完成父类数据的初始化。
在加载子类时,父类一定会加载,且先于子类加载到方法区。
Student stu1 = new Student();
Student stu2 = new Student("小李", 40);
stu2.useMoney();
}
}
class Person{
int money;
public Person(){
super();//Person继承的是Object
money = 1000000;
System.out.println("父类Person的无参构造方法");
}
}
class Student extends Person{
//如果一个类里不写任何的构造方法,系统就会提供一个无参的构造方法
public Student(){
//子类初始化之前,一定要先完成父类数据的初始化。省略了super();你不写,系统也会默认加上去
super();
System.out.println("子类Student的无参构造方法");
}
public Student (String name, int age){ //这里即使父类和子类没有添加属性,这里也可以有name,age,只要在创建对象时参数类型用对,就能执行里面的语句
System.out.println("子类的有参的构造方法");
}
public void useMoney(){
System.out.println("用钱" + money);
}
}
/*输出结果:
父类Person的无参构造方法
子类Student的无参构造方法
父类Person的无参构造方法
子类的有参的构造方法
用钱1000000
*/
但是子类中的构造方法也可以改成访问有参的构造方法,默认情况下访问的是父类的无参构造方法
class Person{
String name ;
int age;
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
}
class Student extends Person{//
public Student(){
//super();不调用父类的无参构造方法,改成有参的构造方法
super("小王", 34);
}
}
父类没有无参构造方法,子类怎么办?
- 子类必须创建无参构造方法,内部用super调用父类构造方法
- 子类实现有参的构造方法,且用super调用父类的构造方法。
- 父类自己实现无参构造方法。
(5)方法的重写与方法的重载之间的关系
方法的重写(Override)仅限于在子类和父类中使用,修饰符、返回值、方法名、参数类型都要一样,其方法内容可能不一样。
方法的重载(Overload)需要保证方法名一样。
方法的重写可以让子类沿袭父类的功能,同时也可以添加属于自己的内容
格式:
class Father{
public void drive(){
System.out.println("开宝马。。。");
}
}
class Son extends Father{
@Override
public void drive() {
super.drive();//演习父类的功能,下面可以加入自己的想要的功能
System.out.println("开红旗。。。");
}
}
父类的私有方法,子类无法继承,因此也无法重写。因此,子类重写父类方法时,访问权限最好就一致。此外,final修饰的方法也无法被重写