JAVA基础知识--对象与类

对象与类

对象:客观存在能够相互区分的个体,比如这辆汽车、这个人、这间房子、这张桌子、这株植物、这张支票、这件雨衣。概括来说就是:万物皆对象。

类:若干具有相同属性和行为的对象的群体或者抽象,类是创建对象的模板,由属性和行为两部分组成

类是对象的概括或者抽象,对象是类的实例化。

类的声明

[修饰符] class 类名{ //类的声明部分
	[成员变量]
	[成员方法]
}

修饰符

public, protected, default, private

Java中,可以使用访问修饰符来保护对类、变量、方法和构造方法的访问。Java 支持 4 种不同的访问权限。作用:可以修饰类,也可以修饰类中的成员(变量,方法)

分类
  • private : 可用来修饰内部类、属性、方法。被private修饰的属性、方法、类只能被该类的对象访问,其子类不能访问,更不能允许跨包访问。注意:private可以修饰内部类,不可以修饰外部类
  • protected : 它主要的作用是保护子类,子类可以用它修饰的成员,其他的不可以protected修饰符可以被本类、同一个包中的类、不同包中的子类所访问到。protected可以修饰属性、方法,但是不能修饰外部类,可以修饰内部类。
  • default : 当定义变量、方法以及类时,没有写访问修饰符,则代表默认的修饰符 default。default 修饰的属性、方法、类,只能被本类或者同一个包中的其他类访问到,针对本包访问而设计,任何处于本包下的属性、方法、类、接口等,都可以相互访问。

    注:在接口中,默认的访问修饰符是public

  • public : 不同类、不同包下都可以访问。1个java文件中只可以有一个public修饰的类,并且类名需要和文件名相同

访问修饰符图

有一个例子可以参考:JAVA的四种访问修饰符

其他修饰符 / 非访问控制符

abstract, static, final

  • static:静态的,非实例的,类的
    可以修饰内部类,也可以修饰成员
  • final:最终的,不可改变的
    可以修饰 成员局部变量
  • abstract:抽象的,不可实例化的
    可以修饰 类成员

有且只能有一个public类

在一个 .java 程序中,可以出现多个类,但有且仅有一个类是 public 并且这个public类的名字必须和文件名相同(主类)

每一个java程序运行的时候都会先执行public这个类,而且只执行public类中的代码,如果写了其他的类但是在public类中没有用到,就不会执行其他的类,但是这个类的写法必须正确;如果写了其他的类并在public类中使用了其他的类,那么也会执行其他类的相应代码。

类的构造函数

类的构造函数可以用来给一个类的数值赋一个初值,用来初始化(new)该类的一个新的对象。

而且构造函数和类名同名,并且不需要写返回值类型。

class person{
    String name;
    int age;
    person(String s,int a){  //类的构造函数
        name=s;
        age=a;
    }
    void sayhello(){
        System.out.println("嗨嘿嗨");
    }
    void printages(){
        System.out.println(age);
    }
}

我们没写构造函数的时候

如果我们自己没有写构造函数,那么程序会自动生成一个默认构造函数,这个默认构造函数没有参数,函数中也没有任何语句,也就是相当于什么都不做。
默认生成的类似于这样

person(){}

运用

① 类中没写构造函数

在没写构造函数的时候,初始化一个新对象的时候,不需要写参数

② 类中写了构造函数

那么程序就不会再生成默认构造函数了,在初始化一个对象的时候,就使用咱们自己写的构造函数了,并且如果自己写的构造函数中有参数,必须要加上参数,否则报错,如果本身就没写参数,那么可以不写。

构造函数中 this 的使用

1. this 指当前这个对象实例本身

比如说,age=和 this.age 是一样的,都是可以运行的。

void printages(){
        System.out.println(age);
}
void printages(){
        System.out.println(this.age);
}

2. this 还可以用来解决 局部变量 和  同名的问题

比如说this.name指的就是域变量,name指的就是参数变量。

person(String name,int age){
        this.name=name;
        this.age=age;
}

3.在构造函数中,this 可以调用另一种构造方法

并且这条调用语句必须放在第一句。 ??

person(){
	this()
	...
}

抽象方法与抽象类 

引入

分析一下Geometry父类,发现父类中的这个draw()方法写了和没写一样,因为完全就没有产生这么一个调用

class Geometry{
    void draw(){
        System.out.println("画一个几何图形");
    }
}
  • 为此我们就可以将此方法设置为抽象方法,在返回值类型前加上一个abstract关键字即可,然后抹去这个方法的方法体,因为抽象方法是不可以有方法体的
abstract void draw();
  • 但是这样写的话编译器马上就给我们报错了,说是一定要将这个类也抽象,这就形成了抽象类的概念,因为如果一个类中有抽象方法,那么这个类就必须是抽象类

注意事项

  1. 抽象类不能被实例化
  2. 类内的数据成员,和普通类没有区别(就是这个抽象类,它除了不能对抽象方法做实现外,其他其实也和普通的类没什么区别,普通的成员变量和成员方法都是可以定义的)
  3. 抽象类主要就是用来被继承的,所以不可以被final关键字修饰抽象方法也是一样,需要被重写(final关键字如果去修饰方法的时候,那么这个方法就不可以被重写,如果去修饰类的话,那么这个类就不可以被继承,所以一定不要把abstract和final关键字写在一起,这是矛盾的)
  4. 如果一个类继承了这个抽象类,那么这个类必须重写抽象类中的抽象方法
  5. 不可以用 static private 关键字修饰abstract方法
  6. 抽象类中也可以由构造方法,方便子类调用

 

可以学习具体实例 Java | abstract关键字【面向对象的第三大特征——多态】_javaabstract关键字-CSDN博客

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值