1.简述重载(Overload)与重写(Override)的区别。
重载:在同一个类中,针对一个对象写不同的构造方法同一个类中,方法名相同,参数列表不同(参数类型不同、参数个数不同、参数顺序不同)
public class Person {
String name;
int age;
String sex;
public Person(){
}
public Person(String n,int a){
name=n;
age=a;
}
public Person(String n,int a,String s){
name=n;
age=a;
sex=s;
}
String name;
int age;
String sex;
public Person(){
}
public Person(String n,int a){
name=n;
age=a;
}
public Person(String n,int a,String s){
name=n;
age=a;
sex=s;
}
重写:当子类继承父类时,可以从父类继承它的属性和方法,如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫做方法的重写。
重写的注意事项(三要素):
1. 只能存在于子类和父类之间
2. 子类的方法名称、输入参数和返回值类型完全一致或子类方法返回值类型是父类方法返回值类型的子类。
3. 权限不能比父类方法更加严格。例如:不能父类是private 子类是 public
1. 只能存在于子类和父类之间
2. 子类的方法名称、输入参数和返回值类型完全一致或子类方法返回值类型是父类方法返回值类型的子类。
3. 权限不能比父类方法更加严格。例如:不能父类是private 子类是 public
注意:重写的前提是先继承了父类的方法。
父类:
package override;
public class Person {
public Object getInfo(){
System.out.println("Person父类的getInfo()方法");
return "我是父类中的方法";
}
public void makeMoney(){
System.out.println("开工厂赚钱....");
}
public Object getInfo(){
System.out.println("Person父类的getInfo()方法");
return "我是父类中的方法";
}
public void makeMoney(){
System.out.println("开工厂赚钱....");
}
子类:
package override;
public class Student extends Person{
@Override
public String getInfo(){
System.out.println("子类方法");
return "学生的getInfo()方法";
}
@Override
public void makeMoney(){
System.out.println("开互联网公司赚钱....");
}
}
@Override
public String getInfo(){
System.out.println("子类方法");
return "学生的getInfo()方法";
}
@Override
public void makeMoney(){
System.out.println("开互联网公司赚钱....");
}
}
2.面向对象
对象:用来描述客观事物的一个实体,由一组属性和行为构成
类:类是一个模版,描述一类对象的行为和状态
3.this关键字
挡在方法中使用本类非static属性中,都会隐涵的使用this名称
this可以看作是一个变量,其值是当前对象的引用
用法一:当类中某个非静态方法的参数名跟类的某个成员变量名相同时,为了避免参数的作用范围覆盖了成员变量的作用范围,必须明确地使用this关键字来指定成员变量
用法二:如果某个构造方法的第一条语句具有形式this(...),那么这个构造方法将调用本类中的其他构造方法。
package thisdemo;
public class Person {
String name;
int age;
String sex;
public Person(){
System.out.println("无参构造...");
}
public Person(String name,int age){
this();
System.out.println("调用了两参的构造方法");
this.name=name;
this.age=age;
}
public Person(String name,int age,String sex){
this(name,age);
System.out.println("调用了三参的构造方法");
this.sex=sex;
}
public void say(){
System.out.println("我叫"+this.name+";今年"+this.age+"岁了,性别:"+this.sex);
}
}
String name;
int age;
String sex;
public Person(){
System.out.println("无参构造...");
}
public Person(String name,int age){
this();
System.out.println("调用了两参的构造方法");
this.name=name;
this.age=age;
}
public Person(String name,int age,String sex){
this(name,age);
System.out.println("调用了三参的构造方法");
this.sex=sex;
}
public void say(){
System.out.println("我叫"+this.name+";今年"+this.age+"岁了,性别:"+this.sex);
}
}
4。static关键字
在类中,用static声明的成员变量为静态成员变量,它是该类的公用变量,对于该类的所有对象来说,static成员变量只有一份。
用static声明的方法为静态方法,该方法独立于类的实例,所以也叫类方法。
静态方法中只能直接调用本类中其他的静态成员(变量和方法)。
静态方法中不能使用this和super关键字。
静态成员可以通过类名(不需要实例化)或类的实例去访问。
用static声明的方法为静态方法,该方法独立于类的实例,所以也叫类方法。
静态方法中只能直接调用本类中其他的静态成员(变量和方法)。
静态方法中不能使用this和super关键字。
静态成员可以通过类名(不需要实例化)或类的实例去访问。
package staticdemo;
public class Person{
String name;
int age;
static int count; // 静态成员变量属于类的,对于所有该类的对象是公用的
public Person(){
count++;
}
public Person(String name,int age){
count++;
this.name=name;
this.age=age;
}
public static int getStaticCount(){
return count;
}
public void say(){
System.out.println("我叫"+this.name+";今年"+this.age+"岁了");
}
}
String name;
int age;
static int count; // 静态成员变量属于类的,对于所有该类的对象是公用的
public Person(){
count++;
}
public Person(String name,int age){
count++;
this.name=name;
this.age=age;
}
public static int getStaticCount(){
return count;
}
public void say(){
System.out.println("我叫"+this.name+";今年"+this.age+"岁了");
}
}
static静态代码块
在类中可以使用不包含在任何方法中的静态代码块(static block),当类被JVM载入时,静态代码块被执行,且只被执行一次。
静态代码块经常用来初始化类的静态成员变量。
static{
// 静态代码块内容
}
静态代码块经常用来初始化类的静态成员变量。
static{
// 静态代码块内容
}
5.封装性
封装(Encapsulation)
对外部不可见,隐藏对象的属性和实现细节。
封装的好处:隐藏类的实现细节,让使用者只能通过程序员规定的方法来访问数据,可以方便的加入存取控制语句,限制不合理操作。
继承(extends)
代码的重用
扩展类的功能
多态(Polymorphism)
对象的多态性
对外部不可见,隐藏对象的属性和实现细节。
封装的好处:隐藏类的实现细节,让使用者只能通过程序员规定的方法来访问数据,可以方便的加入存取控制语句,限制不合理操作。
继承(extends)
代码的重用
扩展类的功能
多态(Polymorphism)
对象的多态性
6.封装性的体现
类的封装(属性、方法都存在于某个类中)
对字段的封装
1字段设置为私有(private)
2添加get /set 方法
访问修饰符的限制,保证数据的安全
对字段的封装
1字段设置为私有(private)
2添加get /set 方法
访问修饰符的限制,保证数据的安全