Java学习 第三章 面向对象(上)

本文深入讲解Java的基础概念,包括对象和类的关系、构造方法的作用、方法重载与重写的区别、this与super关键字的应用等核心内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.对象和类

1.对象和类的定义

对象可以看成是静态属性(成员变量)和动态属性(方法)的封装体

类是用来创建同一类型对象的“模板”,在一个类中定义了该类对象所应具有的成员变量以及方法


2.对象和类是分不开的,必须先有类 才有对象

 成员变量+方法=类  --new-> 对象

类是静态的概念,对象是new出来的,位于堆内存。同一个类的每个对象有不同的成员变量存储空间,同一类的每个对象共享该类的方法。

类的每个成员变量在不同的对象中都有不同的值,而方法只有一份,执行的时候才占用内存


约定俗成的命名规则:

类名的首字母大写

变量名和方法名的首字母小写

运用驼峰标识


二.构造方法

构造方法是定义在Java类中的一个用来初始化对象的函数,与类同盟切没有返回值(void也不可以),当没有指定构造函数时,编译器为类自动添加形如  类名(){} 的构造函数,若用户有定义构造方法,系统则不自动添加。

public  class Person{

int id;

int age=20;

//下面就是自定义的构造方法

Person(int _id,int _age){

id=_id;

age=_age;

}

public  static  void  main(String args[]){

Person  p1=new Person(1,22);

}

}


使用 new +构造方法 创建一个新的对象



三.方法的重载(overload)

方法的重载指一个类中可以定义有相同名字、但参数不同的多个方法。调用时,根据不同的参数列表选择对应的方法。(方法名一样,参数一样,但返回值不一样,则不是重载)

与普通方法一样,构造方法也可以重载。

int  max(int a,int b,int c)

int  max (int  a,int b)


四.this 关键字

在类的方法定义中使用的this关键字代表使用该方法的对象的引用

当必须指出当前使用方法的对象是谁时要使用this

有时使用this可以处理方法中成员变量和参数重名的情况

this 可以看着是一个变量,它的值是当期对象的引用


public class Leaf{

int i=0;

Leaf(int i){ this.i=i;}

Leaf increament(){

i++;

return this;

}

void print(){System.out.println("i="+i);}

public  static  void  main(String  args[]){

Leaf   leaf=new Leaf(100);

leaf.increament().increament().print();

}

}


执行结果:i=102


五.static  关键字

在类中用static 声明的成员变量是静态成员变量,它为该类的公用变量,在第一次使用时初始化,对于该类的所有对象来说static成员变量只有一份。

用static声明的方法为静态方法,在调用该方法时,不会将对象的引用传递给它,所以在static方法中不可访问非static的成员。

可以通过对象应用或类名(不需要实例化)访问静态成员


六.类的继承

Java中使用extends关键字实现类的继承机制,语法为<modifier>  class <name>  [extends <superclass>]

通过继承,子类自动拥有了基类(superclass)的所有成员(成员变量和方法)

Java 只支持单继承,不允许多继承(一个子类只能有一个基类,一个基类可以派生出多个子类


七.访问控制

Java 权限修饰符 public protedted private 置于类的成员定义前,用来限定其它对象对该类对象成员的访问权限

对应class的权限修饰只可以用public 和default



八.方法的重写

在子类中可以根据需要对从基类中继承来的方法进行重写。重写方法必须和被重写方法具有相同方法名称、参数列表和返回类型,重写方法不能使用比被重写方法更严格的访问权限

class Person{
private int age;
private String name;

public void setAge(int _age){
age=_age;
}
public void setName(String  name){
this.name=name;
}
public int getAge(){
return age;
}
public String getName(){
return name;
}
public String info(){
return "Name="+name+"Age="+age;
}

}
class  Student extends  Person{
private String sex="male";
public void setSex(String _sex){
sex=_sex;
}
public String getSex(){
return sex;
}
// 下面这个方法就是对父类方法的重写
public String info(){
return "Name="+getName()+"Age="+getAge()+"sex="+sex;
}

}


public class OverWrite {

public static void main(String  agrs[]){
Student s=new Student();
Person  p=new Person();

p.setAge(18);
p.setName("Amy");
s.setSex("Female");

System.out.println(p.info());
System.out.println(s.info());

s.setAge(88);
System.out.println(p.info());
System.out.println(s.info());

}
}


九.super 关键字

在Java类中使用super调用父类


继承中的构造方法

1.子类的构造的过程中必须调用其基类的构造方法

2.子类可以在自己的构造方法中使用super(argument _list)调用基类的构造方法

 使用this(argument_list)调用本类的另外的构造方法

 如果调用super,必须写在子类构造方法的第一行

3.如果子类的构造方法中没有显示地调用基类构造方法,则系统默认调用基类无参数的构造方法

4.如果子类构造方法中既没有显示调用基类构造方法,而基类中又没有无参的构造方法,则编译出错


class FatherClass{
public int value;
public void f(){
value=100;
System.out.println("FatherClass.value="+value);
}

}
class  childClass extends  FatherClass{
public int value;
public void f(){
// 下面这句调用的是父类的
super.f();
value=200;
System.out.println("ChildClass.value="+value);
System.out.println(value);
System.out.println("FatherClas.value="+super.value);
}
}


public class TestSuper {
public static void main(String  args[]){
childClass c=new  childClass();
c.f();

}

}


十.Object 类

Object 类是所有Java类的根基类

如果在类的声明中未使用extend是关键字指明其基类,而默认基类为Object类

Object类中定义有public String toString()方法,其返回值是String类型,在进行String与其它类型数据的连接

操作时(如:System.out.println("info"+person)) 将自动调用该对象类的toString()方法

Object类中定义有public boolean equals(Object obj)方法


十一.对象转型(casting)

一个基类的引用类型变量可以指向其子类的对象

一个基类的引用不可以访问其子类对象新增加的成员(属性和方法)

可以使用引用变量 instanceof类名 来判断该引用型变量所指向的对象是否属于该类或该类的子类

子类的对象可以当作基类的对象来使用称作向上转型(upcasting),反之成为i向下转型(downcasting)


















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值