首页 > 编程语言 > 详细

Java对象

时间:2021-03-31 14:10:28      阅读:24      评论:0      收藏:0      [点我收藏+]

Java对象

1.对象的组成:

? 属性和方法


public class Person {
    // 属性
    String name;
    int age;
    // 方法
    public void getInformation() {
        System.out.println("name:" + name + ",age:" + age);
    }
}

this:用于本类中,可以直接调用类中的属性和方法。调用类中的属性和方法也可以省略this关键字

// Person.java文件
public class Person {
    String name;
    int age;
    public void getInformation() {
        System.out.print("getInformation: name:" + this.name + ",age:" + this.age);
    }
    public void getInformation_1() {
        System.out.println("\tgetInformation_1: name:" + name + ",age:" + age);
    }
    public void getPerson() {
        this.getInformation();
        getInformation_1();
    }
}
// Application.java文件
public class Application {
    public static void main(String[] args) {
        Person person = new Person();
        person.name = "张三";
        person.age = 18;
        person.getPerson(); //getInformation: name:张三,age:18	getInformation_1: name:张三,age:18
    }
}

2.对象的实例化:

? new以及构造方法

? 构造方法:

? 修饰符 类名(参数列表) {

? // 方法体

? }

? 举例1:默认存在无参构造方法,创建有参构造方法后,无参构造方法就不存在了,如果还需无参构造方法,重写。

// Teacher.java文件
public class Teacher {
    String name;
    int age;
}
// Student.java文件
public class Student{
    String name;
    int age;
    public Student() {

    }
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
}
// Person.java文件
public class Person {
    String name;
    int age;
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
}
// Application.java文件
public class Application {
    public static void main(String[] args) {
        Teacher teacher = new Teacher();
        Person person1 = new Person("李四", 18);
        Person person2 = new Person();//报错
        Student student1 = new Student();
        Student student2 = new Student("张三", 11);
    }
}

前提:先看3.2的继承

举例2:在继承中,子类的构造方法会默认调用父类的无参构造方法(super()),如果父类只有有参构造方法,需要写子类的构造方法,否则会报错

// Person.java文件
public class Person {
    String name;
    int age;
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
}
// Student.java文件
public class Student extends Person{
    public Student() {
        super("", 1);
    }
}
// Teacher.java文件
public class Teacher extends Person{ //报错
}

? 举例3:构造方法中,调用用父类的构造方法或者自身的构造方法,只能调用一个,并且必须在第一行,否则会报错

// Person.java文件
public class Person {
    String name;
    int age;
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    Person() {
    }
}
// Student.java文件
public class Student extends Person{
    public Student() {
        this("", 0);
    }
    public Student(String name, int age) {
        super(name, age);
    }
    public Student(String name) {
        this();
        this("", 0); //报错
    }
    public Student(int age) {
        super();
        this(); // 报错
    }
    public Student(int age, String name) {
        System.out.println("Student");
        super(name, age);//报错
    }
}

3.对象的特性:

3.1 封装

? private和get/set方法

? 一般用于类的属性。只有在本类中可以直接调用,其他类想要调用封装后的属性,通过get/set方法。

? 举例1:没有get/set方法

// Student.java文件
public class Student {
    String name;
    private int age;
    public void study() {
        System.out.println("name:" + name);
        System.out.println("age:" + age);
    }
}
// Application.java文件
public class Application {
    public static void main(String[] args) {
        Student student = new Student();
        student.name = "张三";
        student.age = 11; // 报错
    }
}

? 举例2:有get/set方法:通过set方法对属性进行赋值,通过get方法获取属性的值,set和get方法的命名规则:set+属性名开头大写加上驼峰原则,get+属性名开头大写加上驼峰原则

// Student.java文件
public class Student {
    String name;
    private int age;
    public void study() {
        System.out.println("name:" + name);
        System.out.println("id:" + age);
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
}
// Application.java文件
public class Application {
    public static void main(String[] args) {
        Student student = new Student();
        student.name = "张三";
        student.setAge(11);
        System.out.println(student.name);// 张三
        System.out.println(student.getAge()); // 11
    }
}

? 举例3:封装的好处,可以在set的方法中对数据进行处理

// Student.java文件
public class Student {
    String name;
    private int age;
    public void study() {
        System.out.println("name:" + name);
        System.out.println("id:" + age);
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        if (age < 0 || age > 150) {
            this.age = -1;
        } else {
            this.age = age;
        }

    }
}
// Application.java文件
public class Application {
    public static void main(String[] args) {
        Student student = new Student();
        student.setAge(-2);
        System.out.println(student.getAge()); //-1
        student.setAge(200);
        System.out.println(student.getAge());//-1
        student.setAge(18);
        System.out.println(student.getAge());//18
    }
}

3.2 继承

? 继承为只能继承一个类,所有的类都默认继承Object类

? extends:继承关键字

? 举例1:Person为Student的父类,Student为Person的子类,

子类默认继承父类的属性和方法

//Person.java文件
public class Person {
    String name;
    int age;
    public void getInformation() {
        System.out.println("name:" + name + ",age:" + age);
    }
}
//Student.java文件
public class Student extends Person{
}
//Application.java文件
public class Application {
    public static void main(String[] args) {
        Student student = new Student();
        student.name = "张三";
        student.age = 18;
        student.getInformation();//name:张三,age:18
    }
}

? 举例2:父类中被private修饰的属性和方法无法被继承

//Person.java文件
public class Person {
    String name;
    int age;
    private int id;
    private void getInformation() {
        System.out.println("id" + id + ",name:" + name + ",age:" + age);
    }
}
// Student.java文件
public class Student extends Person{
}
// Application.java文件
public class Application {
    public static void main(String[] args) {
        Student student = new Student();
        student.name = "张三";
        student.age = 18;
        student.id = 1111;//报错
        student.getInformation();//报错
    }
}

? super:调用父类关键字

? 举例1:super可以调用父类的属性和方法

// Person.java文件
public class Person {
    String name;
    int age;
    public void getAge() {
        System.out.println("age:" + age);
    }
}
// Student.java文件
public class Student extends Person{
    int stuNum;
    public void getStudentInformation() {
        System.out.print("stuNum:" + stuNum + ",name:" + super.name + ",");
        super.getAge();
    }
}
// Application.java文件
public class Application {
    public static void main(String[] args) {
        Student student = new Student();
        student.name = "张三";
        student.age = 18;
        student.stuNum = 1;
        student.getStudentInformation(); // stuNum:1,name:张三,age:18
    }
}

? 重写:在继承的基础上实现,用于方法中,子类中的方法于父类的方法,方法中的修饰符,返回值,方法名,参数类型都一样,重写的方法前面加上@Override,表示重写,static修饰的不会被重写,例子看多态的举例2

? 举例1:

// Person.java文件
public class Person {
    String name;
    int age;
    public void getInformation() {
        System.out.print("person:");
        System.out.println("name:" + name + ", age:" + age);
    }
}
// Student.java文件
public class Student extends Person{
    @Override
    public void getInformation() {
        System.out.print("student:");
        System.out.println("name:" + name + ", age:" + age);
    }
}
// Application.java文件
public class Application {
    public static void main(String[] args) {
        Student student = new Student();
        student.name = "张三";
        student.age = 18;
        student.getInformation(); // student:name:张三, age:18
    }
}

3.3 多态

? 在继承和重写的基础上实现的,声明为父类,实例化为子类,调用重写的方法,调用的是父类的重写方法

举例1:

// Person.java文件
public class Person {
    public void getInformation() {
        System.out.println("person");
    }
}
// Student.java文件
public class Student extends Person{
    @Override
    public void getInformation() {
        System.out.println("student");
    }
}
// Application.java文件
public class Application {
    public static void main(String[] args) {
        Person person = new Student();
        person.getInformation(); // student
    }
}

? 举例2:被static修饰的方法,不会被重写

// Person.java文件
public class Person {
    public static void getInformation() {
        System.out.println("person");
    }
}
// Student.java文件
public class Student extends Person{
    public static void getInformation() {
        System.out.println("student");
    }
}
// Application.java文件
public class Application {
    public static void main(String[] args) {
        Person person = new Student();
        person.getInformation(); // person
    }
}

? 举例3:声明为父类,实例化为子类,声明的父类不能调用子类特有的属性和方法,要想调用子类特有的属性和方法,强制转化即可。

// Person.java文件
public class Person {
    public void getInformation() {
        System.out.println("person");
    }
}
// Student.java文件
public class Student extends Person{
    String mainSubject = "语文,数学,英语";
    @Override
    public void getInformation() {
        System.out.println("student");
    }
    public void study() {
        System.out.println("study");
    }
}
// Application.java文件
public class Application {
    public static void main(String[] args) {
        Person person = new Student();
        person.getInformation(); // student
        System.out.println(((Student)person).mainSubject);// 语文,数学,英语
        ((Student)person).study();// study
    }
}

Java对象

原文:https://www.cnblogs.com/longma-ling/p/14600695.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!