java面向对象

1、Java面向对象中类与对象的概念和使用

方法的定义:

方法就是一段可以重复调用的代码。

定义格式:

访问修饰符 返回值类型 方法名(){

方法主体

}方法的返回值类型:

void类型不需要返回值,其他类型的全部需要返回值。

方法的重载:

方法名称不同,但是参数的类型和个数相同,通过传递参数的个数和类型不同来完成不同的功能。

类的定义:

class 类名称{

属性

方法

} 声明一个类需要通过一个关键字class。

类与对象的关系:

类是对某一类事物的描述,是抽象的、概念上的意义,对象是实际存在的该类事物的每一个个体,也被称为对象或实例。

了解面向对象:

1、程序的发展历程:面向过程、面向对象。

2、解释面向过程和面向对象:(比如制作一个盒子)

面向过程:不去想做什么样子的盒子,随机取工具制作。

面向对象:先想好做一个什么样的盒子,再去找对应的工具去做。

面向对象的三大特征:

封装性:对外部不可见。

继承:扩展类的功能。

多态性:方法的重载。 对象的多态性。

方法的递归:

递归调用就是方法自己调用自己。

例如:求1-100的和。

package
java面向对象;

public
class 递归调用 {

public
static void main(String[] args) {

System.out.println(sum(100));

}

//求1-100的和

public
static int sum(int n){

if (n ==

  1. //程序出口

return
1;

else

return
n+sum(n-1);

}

}Java面向对象的基本特征之一:封装性

封装性:

1、封装性的目的:保护某些属性和方法不被外部所看见。

2、封装的实现:为属性和方法进行封装是通过关键字private声明的。
实现该属性的set和get方法,为外部所访问。

例如:

package
java面向对象;

//private
实现分装,外部不可直接调用。

//get set
是外界访问的接口。

class
Person{

private
int age;

private
String name;

public
int getAge() {

return
age;

}

public
void setAge(int age) {

if
(age>=0 && age<150) { //判断年龄是否合法。若非法显示为0

this.age
= age;

}

}

public
String getName() {

return
name;

}

public
void setName(String name) {

this.name
= name;

}

public
void tell(){ //get是得到

System.out.println(“姓名:”+getName()+" 年齡:"+getAge());

}

}

public
class 封装性 {

public
static void main(String[] args) {

Person
per = new Person();

per.setName(“张三”);//set是设置

per.setAge(30);

per.tell();

}

}匿名对象:

匿名对象就是没有名字的对象,如果程序中只用一次该对象,就可以事业匿名对象的方式。

例如:

package
java面向对象;

class
Student{

public
void tell() {

System.out.println(“hello”);

}

}

public
class 匿名对象 {

public
static void main(String[] args) {

//正常对象

Student
stu = new Student();

stu.tell();

//匿名对象

new
Student().tell();//调用一次的情况可用匿名对象

}

}构造方法:

1、格式:

访问修饰符 类名称(){

程序语句

}注意点:

构造方法名称必须与类名一致。

构造方法没有返回值。

3、构造方法主要是为类中的属性初始化。

4、每个类在实例化之后都会调用构造方法,如果没有构造方法,程序在编译的时候回创建一个无参的什么都不做的构造方法。

5、构造方法也可以重载。

例如:

package
java面向对象;

class
People{

//构造方法

public
People(int a) {

System.out.println(a);

}

}

public
class 构造方法 {

public
static void main(String[] args) {

People
per = new People(5);

}

}Java面向对象中引用的传递

引用传递:

也称为传地址。方法调用时,实际参数的引用(地址,而不是参数的值)被传递给方法中相对应的形式参数,在方法执行中,对形式参数的操作实际上就是对实际参数的操作,方法执行中形式参数值的改变将会影响实际参数的值。

值传递:

方法调用时,实际参数把它的值传递给对应的形式参数,方法执行中形式参数值的改变不影响实际参
数的值。

例如:

package
java面向对象;

class
Ref{

String
temp = “hello”;

}

public
class 引用传递 {

public
static void main(String[] args) {

Ref r1 =
new Ref();

System.out.println(r1.temp);

tell(r1);

System.out.println(r1.temp);

}

public
static void tell(Ref r1) {

r1.temp
= “word”;

}

}this关键字:

表示类中的属性和调用方法。

调用本类中的构造方法。

表示当前对象。

package
java面向对象;

class
People1{

String
name;

int age;

public
People1(String name,int age) {

this(); //this作用二:调用本类中构造方法

//注意:使用此调用,必须放在第一行

this.name=name;
//this作用一:调用本类中属性name

this.age=age;

}

private
People1() {

System.out.println(“调用无参构造方法”);

}

public
void tell() {

System.out.println(“姓名:”+this.name+" 年龄:"+this.age);

System.out.println(this);
//this作用三:表示当前对象

}

}

public
class this关键字 {

public
static void main(String[] args) {

People1
p = new People1(“张三”,30);

p.tell();

}

}

static关键字:

使用static声明属性:static声明全局属性。

使用static声明方法:直接通过类名调用。

注意点:使用static方法的时候,只能访问static声明的属性和方法,而非static声明的属性和方法是不能被访问的。

4、Java面向对象基本特征:继承

继承的实现:

继承的基本概念:扩展父类的功能。

Java中使用extends关键字完成继承。 class 子类 extends 父类 {}

例如:

package
java面向对象;

class
People2{

String
name;

int age;

public
void tell() {

System.out.println(“姓名:” +name+ “年龄:”+age);

}

}

//学生为人的子类,可以继承人的属性,姓名,年龄

class
Student2 extends People2{

int
score;

public
void say() {

System.out.println(“成绩:”+score);

}

}

public
class 继承 {

public
static void main(String[] args) {

Student2
s = new Student2();

s.age =
15;

s.name =
“小明”;

s.score
= 89;

s.tell();

s.say();

}

}

继承的限制:

在Java中只允许单继承。

子类不能直接访问父类的私有地址。

例如:

package
java面向对象;

//只能进行单继承

//子类不能直接访问父类的私有地址。

class
People3{

private
int age; //封装为私有属性

public
void setAge(int age) {

this.age
= age;

}

public
int getAge() {

return
age;

}

}

class
Worker extends People3{ //Worker单继承People3

}

class
PetWorker extends Worker{ //PetWorker单继承Worker

public
void tell(int age) {

setAge(age); //子类通过get和set可调用父类私有地址

System.out.println(getAge());

}

}

public
class 继承的限制 {

public
static void main(String[] args) {

PetWorker
p = new PetWorker();

p.tell(30);

}

}子类对象的实例化:

在子类对象实例化之前,必须先调用父类中的构造方法,之后调用子类的构造方法。

例如:

package
java面向对象;

class
Father{

public
Father() {

System.out.println(“父类的构造方法”);

}

}

class
Son extends Father{

public
Son() {

System.out.println(“子类的构造方法”);

}

}

public
class 子类对象的实例化 {

public
static void main(String[] args) {

Son s
=new Son(); //声明并实例化

}

}

程序执行结果:

父类的构造方法

子类的构造方法

继承方法的重写:

在继承中,也存在着重写的概念,其实就是定义了和父类同名的方法。

定义:方法名称相同,返回值类相同,参数也相同。

重写的限制:被子类重写的方法不能拥有比父类更加严格的访问权限。

访问权限:private

public、private、protected、default的区别:

首先就class之间的关系做一个简单的定义,对于继承自己的class,base class可以认为他们都是自己的子女,而对于和自己一个目录下的classes(即同一个包),认为都是自己的朋友friendly。

public:public表明该数据成员、成员函数是对所有用户开放的,所有用户都可以直接进行调用

private:private表示私有,私有的意思就是除了class自己之外,任何人都不可以直接使用,私有财产神圣不可侵犯嘛,即便是子女,朋友,都不可以使用。

protected:protected对于子女、朋友来说,就是public的,可以自由使用,没有任何限制,而对于其他的外部class,protected就变成private。

default:java的默认访问权限,当没有使用上面提到的任何访问限定词时,就使用它,这种权限通常被称为包访问权限,在这种权限下,类可以访问在同一个包中的其他类的成员,也即可以访问我们前面说的朋友,在包之外,这些成员如同指定了private。

java 变量作用域的修饰的作用范围:

public:类本身和任何包的任何类都访问

private 只有类本身可以访问,其他类想访问可以通过该类的成员方法访问如getter/setter

protected:保护的,这个和缺省的比较容易混淆,记住最主要区别是:protected可以在不同包的子类被访问,而friendly不可以。 protected可以在类本身、同包的子类,不同包的子类,同包的非子类 被访问

缺省的:可以在类本身,同包的子类,同包的非子类 被访问。

同类

同包

不同包子类

不同包非子类

private

default

protected

public

super关键字:

强行调用父类的方法的执行。

super不一定在重写中使用,也可以表示哪些方法是从父类中继承而来的。

例如:

package
java面向对象;

class A{

void
tell() {

System.out.println(“父类的构造方法”);

}

}

class B
extends A{

void
tell() {     //方法的重写

super.tell();
//super强行调用父类的方法的执行

System.out.println(“子类的构造方法”);

}

}

public
class 继承方法的重写 {

public
static void main(String[] args) {

B b =
new B();

b.tell();

}

}

程序执行结果:

父类的构造方法

子类的构造方法

重写与重载的区别:(重点)

NO

区别点

重载

重写

1

单词

Overloading

Overriding

2

定义

方法名称相同,参数的类型和个数不同

方法名称、参数的类型个数、返回值全部相同

3

权限要求

对权限没要求

被重写的方法不能有比父类更加严格的权限

4

范围

发生在一个类中

发生在继承中

5、Java面向对象-抽象类与接口

final关键字:

1、final关键字在java中被称为完结器,表示终结的意思。

2、final使能声明类、方法。属性:

使能final声明的类不能被继承。

使能final声明的方法不能被重写。

使能final声明的变了变成常量。常量是不可以被修改的。

抽象类:

抽象类概念:包含一个抽象方法的类就是抽象类。

抽象方法:声明而未被实现的方法,抽象方法必须使用abstract关键字声明。

抽象类被子类继承,子类(如果不是抽象类)必须重写抽象类中的所有抽象方法。

定义格式:

abstract
class className{

属性

方法

抽象方法

}

抽象类不能直接实例化,要通过其子类进行实例化。

例如:

package
java面向对象;

abstract
class Abs{   //抽象类也必须使用abstract声明

int age;

private
void tell() {

}

//抽象方法,声明而未被实现的方法

public
abstract void say();

}

class C
extends Abs{

//抽象类被子类继承,子类(如果不是抽象类)必须重写抽象类中的所有抽象方法。而且方法必须实现。

public
void say() {

System.out.println(20);

}

}

public
class 抽象类 {

public
static void main(String[] args) {

//  Abs a = new Abs();  //抽象类不能被直接实例化

C c = new
C();    //抽象类必须通过子类实例化

c.say();

}

}接口的实现:

接口是Java中最重要的概念、接口可以理解为一种特殊的类,里面全部是由全局常量和公共的抽象方法所组成的。

接口的格式:

interface
interfaceName{

全局常量

抽象方法

}1234

接口的实现也必须通过子类,使用关键字implments,而且接口是可以多实现的。

一个子类可以同时继承抽象类和实现多接口。

一个接口不能继承一个抽象类,但是却可以通过extends关键字同时继承多个接口,实现接口的多继承。

例如:

package
java面向对象;

interface
Ineter1{   //定义了一个接口1

public
static final int  AGE = 20; //定义全局常量,全局常量名称必须全部大写

public
abstract void tell(); //定义一个抽象方法

}

interface
Inter2{   //定义接口2

public abstract
void say();

}

abstract
class Abs3{     //定义抽象类

public
abstract void print();

}

//一个子类同时继承抽象类和实现多接口

class D
extends Abs3 implements Ineter1,Inter2{

public
void tell() {}  //复写接口内的抽象方法

public
void say() {}

public
void print() {}

}

//一个接口不能继承一个抽象类,但是却可以通过extends关键字同时继承多个接口,实现接口的多继承

interface
Inter3 extends Inter2,Ineter1{

}

public
class 接口的实现 {

public
static void main(String[] args) {

//Inetr1
i = new Inetr1(); //接口的实例化必须通过子类。

D d= new
D();  //实例化接口

d.tell();

d.say();

System.out.println(Ineter1.AGE);

}

}Java面向对象多态性

多态性:

1、多态性的体现:方法的重载和重写。  对象的多态性。

2、对象的多态性:

向上转型:程序会自动完成。   父类  父类对象 = 子类实例

向下转型:强制类型转换。        子类   子类对象 = (子类)父类实例

例如:

package
java面向对象;

//多态性的体现:方法的重载和重写。  对象的多态性。

class I{

public
void tell1() {

System.out.println(“I–tell1”);

}

public
void tell2() {

System.out.println(“I–tell2”);

}

}

class J
extends I{

public
void tell1() {

System.out.println(“J==tell1”);

}

public
void tell3() {

System.out.println(“J==tell3”);

}

}

public
class 多态性 {

public
static void main(String[] args) {

//向上转型  程序会自动完成。   父类  父类对象 = 子类实例

//      J j = new J();

//      I i = j;

//      i.tell1();  //执行tell1重写的

//      i.tell2();

//向下转型:强制类型转换。    子类   子类对象 = (子类)父类实例

//必须先向上转型,才能向下转型

I i =
new J();  //是对向上转型的缩写

J j =
(J)i;

j.tell1();

j.tell2();

j.tell3();

}

}

程序执行结果:

J==tell1

I–tell2

J==tell3

instanceof关键字:

instanceof
运算符是用来在运行时指出对象是否是特定类的一个实例。instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例。

用法:result
= object instanceof class

参数:

Result:布尔类型。

Object:必选项。任意对象表达式。

Class:必选项。任意已定义的对象类。

说明:

如果
object 是 class 的一个实例,则
instanceof 运算符返回 true。如果 object
不是指定类的一个实例,或者 object 是 null,则返回 false。

例如:

package
java面向对象;

class
A2{

}

class B2
extends A2{

}

public
class instanceof关键字 {

public
static void main(String[] args) {

A2 a2 =
new A2();

System.out.println(a2
instanceof A2);

System.out.println(a2
instanceof B2);

//向上转型

A2 a3 =
new B2();

System.out.println(a3
instanceof A2);

System.out.println(a3
instanceof B2);

}

}

程序执行结果:

true

false

true

true

抽象类的应用举例:

package
java面向对象;

abstract
class Person1{

private
int age;

private
String name;

public
void setAge(int age) {

this.age
= age;

}

public
int getAge() {

return
age;

}

public
void setName(String name) {

this.name
= name;

}

public
String getName() {

return
name;

}

public
Person1(String name,int age){

this.name
= name;

this.age
= age;

}

public
abstract void want();

}

class
Student1 extends Person1{

private
int score;

public
int getScore() {

return
score;

}

public
void setScore(int score) {

this.score
= score;

}

public
Student1(String name,int age,int score) {

super(name,
age);

this.score
= score;

}

public
void want() {

System.out.println(“姓名:”+getName()+"  年龄:"+getAge()+"  工资:"+getScore());

}

}

class
Worker2 extends Person1{

private
int maney;

public
void setManey(int maney) {

this.maney
= maney;

}

public
int getManey() {

return
maney;

}

public Worker2(String
name, int age, int maney) {

super(name,
age);

this.maney
= maney;

}

public
void want() {

System.out.println(“姓名:”+getName()+"  年龄:"+getAge()+"  工资:"+getManey());

}

}

public
class 抽象类的应用 {

public
static void main(String[] args) {

Student1
s = new Student1(“小明”, 10, 100);

s.want();

Worker2
w = new Worker2(“小明”,30, 3000);

w.want();

}

}

程序执行结果:

姓名:小明  年龄:10  工资:100

姓名:小明  年龄:30  工资:200

接口的应用举例:

package
java面向对象;

interface
USB{      //定义一个USB接口

void
start();  //定义抽象方法

void
stop();

}

class
Computer{

public
static void work(USB u) {

u.start();

System.out.println(“工作中···”);

u.stop();

}

}

class
USBDesk implements USB{  //定义一个U盘设备

public
void start() {

System.out.println(“U盘开始工作”);

}

public
void stop() {

System.out.println(“U盘结束工作”);

}

}

class
Printer implements USB{   //定义一个打印机设备

public
void start() {

System.out.println(“打印机开始工作”);

}

public
void stop() {

System.out.println(“打印机结束工作”);

}

}

public
class 接口的应用 {

public
static void main(String[] args) {

Computer.work(new
USBDesk());   //模拟U盘通过USB接口连接电脑

Computer.work(new
Printer());   //模拟打印机通过USB接口连接电脑

}

}

程序执行结果:

U盘开始工作

工作中···

U盘结束工作

打印机开始工作

工作中···

打印机结束工作

原文:https://blog.csdn.net/qq_38265137/article/details/77572214

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值