标签:实例 set person 依赖 常量 不能 作用 扩大 相同
什么是面向对象
10.3、创建与初始化对象
使用new关键字创建对象
使用new关键字创建的时候,除了分配内存空间之外,还会给创建好的对象进行默认的初始化以及对类中构造器的调用
类中的构造器也称为构造方法,是在进行创建对象的时候必须要调用的。并且构造器有以下两个特点
public static void main(String[] args) {
// 类:抽象的,实例化
//类实例化后会返回一个自己的对象
//student对象就是Student类的具体实例
// Student student = new Student();
//
// student.name = "北五";
// student.age = 19;
// System.out.println(student.name);
// System.out.println(student.age);
// student.study();
//new 实例化一个对象
Person person = new Person("北五");
System.out.println(person.name);
}
package oop.demo2;
public class Student {
String name;
int age;
public void study() {
System.out.println(this.name + "在学习");
}
}
package oop.demo2;
public class Person {
//一个类即使什么都不写,也会有一个默认的方法
String name;
//无参构造
//实例化初始值
//1 使用new关键字,本质是在调用构造器
public Person() {
}
//有参构造:一旦定义了有参构造,无参就必须显示定义
public Person(String name) {
this.name = name;
}
}
高内聚低耦合
封装(数据的隐藏)
属性私有 ,get/set
提高程序安全性,保护数据
隐藏代码的实现细节
统一接口
提高了系统的可维护性
package oop.demo3;
// 类 private:私有
public class Student {
// 属性私有
private String name;
private int id;
private char sex;
private int age;
// 提供一些操作这个属性的方法
//提供一些public的get、set方法
//get获得中国数据
public String getName() {
return name;
}
public int getId() {
return id;
}
public char getSex() {
return sex;
}
//set 给这个数据设置值
public void setName(String name) {
this.name = name;
}
public void setId(int id) {
this.id = id;
}
public void setSex(char sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
if (age > 120 || age < 0) {
System.out.println("年龄不合法");
} else {
this.age=age;
}
}
}
package oop;
import oop.demo3.Student;
public class Application {
public static void main(String[] args) {
Student student = new Student();
student.setName("北五");
System.out.println(student.getName());
student.setAge(122);
System.out.println(student.getAge());
}
}
动态编译
即同一方法可以根据发送对象不同而采用多种不同的行为方式
一个对象的类是是确定的,但是可以指向对象的引用的类型有很多(父类,有关系的类)
instanceof (类型转换)引用类型,
Object object = new Student();
System.out.println(object instanceof Student); //true
System.out.println(object instanceof Person); // true
System.out.println(object instanceof Object); //true
System.out.println(object instanceof Teacher); //false
System.out.println(object instanceof String); //false
Person person = new Student();
System.out.println(person instanceof Student); //true
System.out.println(person instanceof Person); // true
System.out.println(person instanceof Object); //true
System.out.println(person instanceof Teacher); //false
// System.out.println(person instanceof String); //编译报错
Student student = new Student();
System.out.println(student instanceof Student); //true
System.out.println(student instanceof Person); // true
System.out.println(student instanceof Object); //true
// System.out.println(student instanceof Teacher); //编译报错
// System.out.println(student instanceof String); //编译报错
public class Application {
public static void main(String[] args) {
//一个对象的实际类型是确定的
//new Student
//new Person
//Student 能调用的方法都是自己的
Student student = new Student();
// Person 父类型,可以指向子类,但不能调用子类独有的方法
Person person = new Student();
person.run();
student.run();
//对象能执行哪些方法,只要看对象的类是否存在
((Student) person).eat(); // 强制转换:高转低
student.eat();
}
public class Person {
public void run(){
System.out.println("run");
}
}
public class Student extends Person {
@Override
public void run() {
System.out.println("son");
}
public void eat() {
System.out.println("eat");
}
}
多态的注意点
//abstract 抽象类
public abstract class Action {
// abstract 抽象方法,只有方法名字,没有方法的实现
public abstract void doSomething();
//1 不能能new中国抽象类,只能靠子类去实现它:约束!
//2 抽象类中可以写普通方法
//3 抽象方法必须在抽象类中
// 抽象的抽象 约束
public void hello(){
}
public class A extends Action{
@Override
public void doSomething() {
}
}
public interface UserService {
//常量 public static final
int AGE = 90;
//接口中的所有定义其实都是抽象的 public abstract
void add(String name);
void delete(String name);
void update(String name);
void query(String name);
}
public interface TimeService {
void timer();
}
public class UserServiceImpl implements UserService,TimeService{
@Override
public void add(String name) {
}
@Override
public void delete(String name) {
}
@Override
public void update(String name) {
}
@Override
public void query(String name) {
}
@Override
public void timer() {
}
}
。。。。百度
标签:实例 set person 依赖 常量 不能 作用 扩大 相同
原文地址:https://www.cnblogs.com/huangwenpeng/p/14459486.html