java面向对象编程实例大全_java面向对象编程

一、类与实例

类的定义:class 类名(一般大写字母开头,命名规则驼峰命名)

类是抽象概念:例如人类,是不存在的

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

classPerson{privateString name;private intage;public voidsetName(String name){if (name==null ||name.isEmpty()){throw new IllegalArgumentException("invalid name");

}this.name =name;

}public void setNameAndAge(String name,intage){this.name =name;this.age =age;

}public void setAge(intage){this.age =age;

}publicString getName(){return this.name;

}public intgetAge(){return this.age;

}

}

View Code

实例:类的具体化,例如:张三、李四

创建实例:类 实例名 = new 类();

访问实例变量:实例名.变量

Person ming = newPerson();//创建实例

ming.setName("小明");//调用实例方法

ming.setAge(12);

String name=ming.getName();int age = ming.getAge();

方法:

定义方法:

修饰符 方法返回类型 方法名(方法参数列表) {

若干方法语句;

return 方法返回值;

}

实例调用方法:实例.方法()

在方法内部可以使用this(代表实例)来访问类的属性和方法

//多个参数

public void setNameAndAge(String name,intage){this.name =name;this.age =age;

}privateString[] names;//可变类型 类型... 参数名 会转变为数组

public voidsetNames(String... names){this.names =names;

}

构造方法:

修饰符  类名(方法参数){}

构造方法作用:构造方法用来初始化实例,当类中没有构造方法时,系统中会默认创建一个没有参数没有任何执行语句的构造方法

构造方法调用:使用new操作符

构造方法定义:一个类中可以有多个构造方法,调用时会根据参数个数、位置、类型进行区分,类中构造函数还可以调用其他构造函数,使用this(参数)来调用

具体代码实现:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

public classMain {public static voidmain(String[] args) {//调用没有参数的构造方法

Person ming = newPerson();

String name=ming.getName();int age =ming.getAge();

System.out.println(name+age);

}

}classPerson{privateString name;private intage;//构造方法 没有void修饰 方法名与类名相同 调用构造方法必须使用new操作符

public Person(String name,intage){this.name =name;this.age =age;

}//没有参数,没有执行语句的构造方法

publicPerson() {this("Unnamed");

}publicPerson(String name){//调用构造方法使用this(参数)

this(name,18);

}public voidsetName(String name){if (name==null ||name.isEmpty()){throw new IllegalArgumentException("invalid name");

}this.name =name;

}public void setNameAndAge(String name,intage){this.name =name;this.age =age;

}public void setAge(intage){this.age =age;

}publicString getName(){return this.name;

}public intgetAge(){return this.age;

}

}

View Code

方法重载:

packagecom.company;/*** @Time :2020/7/17 10:57

* @Description:

* @作者 :aiyumo*/

public classMethodOverload {public static voidmain(String[] args){

String s= "Test string";int n1 = s.indexOf('t');int n2 = s.indexOf("st");int n3 = s.indexOf("st", 4);

System.out.println(n1);

System.out.println(n2);

System.out.println(n3);

}

}

类的继承

class 子类 extends 父类/基类/超类{}

所有的类默认都继承Object

子类继承父类的所有非private字段和方法除构造方法外,父类可以使用protected来修饰字段

子类访问父类的字段:super.fieldname、this.fieldname、fieldname  编译器会自动定位到父类中的字段

任何类的构造方法,第一行语句必须是调用父类的构造方法,如果没有,编译器会自动添加一个super()。在父类中存在非默认构造函数时,子类中的构造方法必须使用super(参数)来调用父类构造函数。

具体代码:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

/*** @Time :2020/7/17 11:23

* @Description:

* @作者 :aiyumo*/

public classExtendsTest {public static voidmain(String[] args){

Student stu= new Student("xiaoming",12,68);

stu.printParentField();

System.out.printf("%s,年龄:%d,成绩为%d",stu.name,stu.age,stu.score);

}

}classPerson2{protectedString name;protected intage;public Person2(String name, intage) {this.name =name;this.age =age;

}

}/*Student类继承了Person2类的所有字段与方法,

注意:子类不要定义与父类相同的字段,

子类不能访问父类的private字段和方法,用protected修饰的字段可以被子类访问

子类可以通过super.fieldName、this.name、name来访问父类的字段,其中super代表父类*/

class Student extendsPerson2{protected intscore;public voidprintParentField(){

System.out.println(this.name+this.age);

System.out.println(name+age);

System.out.println(super.name+super.age);

}public Student(String name,int age,intscore){/*任何class的构造方法,第一行语句必须是调用父类的构造方法。如果没有明确地调用父类的构造方法,编译器会帮我们自动加一句super();

如果父类没有默认的构造方法,子类就必须显式调用super()并给出参数以便让编译器定位到父类的一个合适的构造方法。

子类不会继承任何父类的构造方法。子类默认的构造方法是编译器自动生成的,不是继承的*/

super(name,age);//自动调用父类的构造方法

this.score =score;

}

}

View Code

类的强制转换

1、向上转型:把一个子类类型变为父类类型的赋值  子类>父类>Object

Person2 p = new Student("xiaoming",12,68); //父类

Student s= new Student("xiaowang",13,72); // 子类

Person2 p1=s;

Object o1=s;

Object o2= p;

2、向下转型:类类型强制转换为子类类型

向下转型时可以使用instanceof来判断类的实例是否是指定的类型  实例变量  instanceof  类型   return  bool

Person2 p2 = new Person2("xiaoli",14);

Student s1=(Student) p1;

Student s2= (Student) p2; //java.lang.ClassCastException

java14中可以使用  实例变量  instanceof  类型  类型变量     可以直接转换,避免后面强制转换

Person2 p3 = new Student("xiaozhang",14,72);//instanceof来判断变量指定的实例是否是指定的类型 实例 instanceof 类 返回bool

System.out.println(p3 instanceof Person2); //true

System.out.println(p3 instanceof Student); //false//java14后可以在判断时,直接转换 if (p3 instanceof Student s3)

if (p3 instanceofStudent){

Student s3=(Student) p3;

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值