Java基础学习(一)对象与类、构造方法、方法重载、属性与修饰符的概念理解---来自大话设计模式

    xiaoxiao2023-10-05  145

    不完全与大话设计模式相同,结合了java与个人的理解。

    对象与类

    对象是一个自包含的实体,用一组可识别的特性和行为来标识。 类是具有相同的属性和功能的对象的抽象的集合。

    很好理解,举个例子:

    public class User { private String name; private int age; // getter/setter... }

    User就是一个类。

    User user1 = new User(); User user2 = new User();

    user1和user2就是两个实例,或者两个对象。实例就是一个真实的对象。 new User()这个操作就是把一个对象实例化。 这个操作实际可以拆分成两部:

    声明一个对象 User user1将对象实例化 user1 = new User()

    构造方法

    构造方法,又叫构造函数,其实就是对类进行初始化。构造方法与类同名,无返回值,也不需要void,在new的时候调用。 例如上述的new User()操作,User()就是构造方法。

    所有的类都有构造方法,如果你不编码,则系统默认生成空的构造方法,若你有定义的构造方法,那么默认的构造方法就会失效。 将上述的User类进行调整,调整后如下:

    public class User { private String name; private int age; public User(String name,int age){ this.name = name; this.age = age; } // getter/setter... }

    此时再使用new User()时会有报错,因为此时该类已有构造方法,默认的空的构造方法就会失效。应该采用new User("张三",20)的方法进行对象的实例化。

    方法重载

    方法重载提供了创建同名的多个方法的能力,但这些方法需使用不同的参数类型。 简单来说就是方法名相同,参数类型不同。 继续对上述User类进行改造:

    public class User { private String name; private int age; public User(String name,int age){ this.name = name; this.age = age; } public User(){ } public User(String name){ this.name = name; } // getter/setter... }

    User()构造方法、User(String name)构造方法,都是是对User(String name,int age)构造方法进行了重载。这样new User()、new User("张三")、new User("张三",20)都可以对对象进行实例化。 方法重载的意义在于,可以在不改变原方法的基础上,新增功能。

    属性与修饰符

    属性是一个方法或一对方法,但在调用它的代码看来,它是一个字段,即属性适合于以字段的方式使用方法调用的场合。 简单来说,上述User类中,name和age就是两个属性。

    public和private都是修饰符。public表示它所修饰的类成员可以允许其他任何类来访问,俗称公有的。而private表示只允许同一个类中的成员访问,其他类包括他的子类无法访问,俗称私有的。

    属性有两个方法get和set。get访问器没有显示设置参数,返回与声明的属性相同的数据类型,表示的意思是调用时可以得到内部字段的值或引用;set访问器有一个和属性相同数据类型的参数,它的作用是调用属性时可以给内部的字段或引用赋值。

    继续完善上述User类:

    public class User { private String name; private int age; public User(String name,int age){ this.name = name; this.age = age; } public String getName(){ return name; } public int getAge(){ return age; } public void setAge(int age){ this.age = age; } }

    在实际开发过程中,类的属性一般都用private来修饰,调用方法采用public来修饰,为了防止外部直接对对象进行操作。比如修改后的User类,当业务逻辑为: 只允许实例化一个用户时对用户进行命名(即name的赋值)操作,命名完成后,只允许修改年龄,不允许修改姓名 时,如果name采用public修饰,则无法对name属性进行有效的控制。

    例如定义一个用户User zhangsan = new User("张三", 18), 当需要获取用户姓名时,可以调用zhangsan.getName()方法,由于name属性是private,所以不能通过zhangsan.name = "李四"操作对姓名进行修改。而当需要将年龄修改为时,由于有age属性有相应的public修饰的set方法可以调用,所以可以采用zhangsan.setAge(20)方法进行修改。

    最新回复(0)