2、C#面向对象:封装、继承、多态、String、集合、文件(上)

面向对象封装

一、面向对象概念

面向过程:面向的是完成一件事情的过程,强调的是完成这件事情的动作。

面向对象:找个对象帮你完成这件事情。

二、面向对象封装

把方法进行封装,隐藏实现细节,外部直接调用。

打包,便于管理,为了解决大型项目的维护与管理。

三、什么是类?

将相同的属性和相同方法的对象进行封装,抽象出 “类”,用来确定对象具有的属性和方法。

类、对象关系:人是类,张三是人类的对象。

类是抽象的,对象是具体的。对象可以叫做类的实例,类是不站内存的,对象才占内存。

字段是类的状态,方法是类执行的动作。

三个特性:封装、继承、多态。

四、访问修饰符

public 公共的,任何地方都可以访问

private 私有的,只有本类中成员可以访问

protected 受保护的,可以在当前类以及子类访问

Intelnal 只能在当前项目中访问,在同一个项目中Intelnal和public权限是一样的。

protected Intelnal 当前项目受保护的。

修饰类的访问修饰符只有两个:public、Intelnal

定义一个类时,如果不加访问修饰符,默认是Intelnal

可访问性不一致:子类可访问性不能高于父类可访问性,可能会被暴漏父类成员。

类中的成员,如果不加访问修饰符,默认都是private

定义一个类

[public] class 类名
{
字段;
属性;
方法;
}

class person
{
public string name; //字段
public int age;
public int height;
public void sayHi()
{
Console.WriteLine("Hello , my name is {0}, my age is {1} , my height is {2}" , this.name, this.age,this.height); //this当前类
}
}

使用关键字 new 创建类的对象称之为实例化。

person p = new person();
p.name = "david";
p.age = 18;
p.height = 172;
p.sayHi();

五、属性

用来限定字段的赋值和取值。

定义属性

private int age;
public int Age{
set{
if(value < 0){ //赋值时进行判断 可以不赋值
return;
}
this.age = value;
}
get { //取值
return this.age;
}
}

简写

public int age {set; get;} //3.0后新增 自动生成get set 代码快。

六、静态(static)

非静态类

在非静态类中,既可以有实例成员,也可以有静态成员。

静态类

在静态类中,只能有静态成员。

静态类不可以用new实例化,直接用类名调用。

只有在程序全部结束之后,静态类才会释放资源。

静态方法

在调用实例方法的时候,需要先实例化,再使用对象名.实例方法。person p = new person(); p.ss;

在调用静态方法的时候,直接使用类名.静态方法。person.ss;

不用new实例化 直接可用的方法 静态(static)的方法。

static方法中可以调用其他satatic方法、字段、属性,但是不能调用非static方法、字段、属性。

在非static方法中可以调用static的方法、字段。

public static int age; //全局变量

七、构造函数

构造方法用来创建对象,并且初始化对象(对每个属性依次赋值)。

定义构造方法时构造方法的名称必须和类名相同, 没有返回值 void也不用写。

可以有参数,可以重载(多个参数不同的构造函数)。

如果不指定构造函数,则类默认有一个无参的构造函数,如果指定了构造函数,则不会再有默认的无参构造函数,需要自己来写。

定义构造函数

class person{ 
public string name;
public person(string name){
this.Name = name;
}
}

通过构造函数初始化属性

person hei = new person("小黑"); //此时p.name = "小黑";

八、this关键字

1、代表当前类中的对象。

2、在类当中显示的调用本类的构造函数 :this

public person(string name; int age){ //全参构造函数
this.Name = name;
this.Age = age;
}
public person(string name):this("name",0){ //不执行方法体 去调用其他构造函数 有的写上 没有的写个值
}

九、析构函数

//当程序结束的时候析构函数才执行,用来释放资源。

~Student{
}

//GC可以自动释放资源,但不是马上,如果想马上释放资源则使用析构函数。

十、命名空间(namespace)

用来解决类重名问题

在其他的命名空间下使用这个命名空间时需要用using关键字引入该namespace。

using namespace;
namespace.class.person c = new namespace.class.person();

如果属于同一命名空间下则不需要用using引入;

十一、对象的引用

值类型

int double datetime bool char struct enum等类型 赋值的时候是复制传递,第二个发生变化,第一个没变化。

i = 10;j = i; i++; j //还是10

值类型存储在内存的栈中。

引用类型

对象 string则是引用类型,类似快捷方式 俩个对象都指向原地址。

person p1 = new person(10); //构造函数赋值10 age person p2 = p1; p1.age++; //都11;

引用类型存储在内存的堆中。

对象较大站内存,所以不会类似值类型那样直接赋值一份,而是共同引用同一块。

字符串String

一、字符串的不可变性

当給一个字符串重新赋值后,旧值依然存储在内存中,并没有被销毁,而是重新开辟一块内存空间存储新的值。

当程序结束后,GC(垃圾回收)扫描整个内存,如果发现有的空间没有被指向,则立即把他销毁。

字符串可以看作是char类型的只读数组

string s = "abcdefg";
s[0]; //可以通过数组下标的方式读取0个 ‘a‘值,只读的不可以赋值。

如果想赋值

ToCharArray()

string s = "abcd"; //定义字符串
char[] ch = s.ToCharArray(); //ToCharArray()方法将字符串转换为字符数组
ch[0] = ‘b‘; //修改字符数组的第一个值
s = new string(ch); //new string (char[]) 方法将字符数组转换为字符串 内存还是新开了一个空间
Response.Write(s); //结果 "bbcd"; 更改了第一个字符

StringBuilder

每次改变值不用重新开辟内存

StringBuilder sb = new StringBuilder(); //定义StringBuilder;
sb.Append("insert "); //append 追加字符串
sb.Append(" values");

Stopwatch

用来测量程序运行时间

Stopwatch sw = new Stopwatch(); //定义
sw.Start(); //开始
//执行程序处
sw.Stop(); //结束
Response.Write(sw.Elapsed); //输出运行事件

ToString()

将任意类型转换为字符串; xxx.ToString();

Length

获得字符串的长度 xxx.Length;

ToUpper()

将字符串转换为大写

ToLower()

将字符串转换为小写

Equals()

比较两个字符串是否相等 s.Equals("s");

重载 s.Equals("s",StringComparison.OrdinalIgnoreCase) 第二个参数枚举类型 可以忽略大小写比较

Split()

将字符串按某字符进行分割,分割成字符串数组。

s.Split() 参数可字符,可字符数组,第二个参数,是否含有空白的字符数组

string s = "asdfljas;ld asljwo;ias fa sdl;fkw asdf"; 
char[] cs = { ‘a‘, ‘ ‘, ‘;‘ }; // 需要去掉的字符
string[] sa = s.Split(cs, StringSplitOptions.RemoveEmptyEntries); // 字符串分割选项.删除空白字符

Contains()

是否包含某字符 s.Contains("白大伟"); true false

Replace()

s.Replace("白大伟","*") 将包含白大伟的字符串全部替换为*

SubString()

从哪截到哪 s.SubString(0,20) 从0开始截 截到20

StartsWith()

判断是否从某字符开始 s.StartsWith("a");

EndsWith()

判断是否从某字符结束 s.EndsWith("g");

IndexOf()

查找字符串第一次出现的位置 s.IndexOf("a") 0 找不到返回-1

重载 s.IndexOf("a",2) 从2位置开始找

LastIndexOf()

查找字符串最后一次出现的位置 s.LastIndexOf("g");

Trim()

s.Trim(); //去掉字符串所有空格
s.TrimStart(); //去掉前面的空格
s.TrimEnd(); //去掉结尾空格

IsNullOrEmpty()

string.IsNullOrEmpty("s") 判断该字符串是否为空或null

Join()

将字符串数组按照某字符进行链接,返回一个字符串 string.Join("|", "a","asdf","asdfasdf")

面向对象继承

一、继承

将重复的一些成员,封装到一个类中,作为这些类的父类。 解决代码冗余

单根性:在c#中只允许继承一个父类。

定义类时不指定继承类,则默认继承object类;object类是所有类的基类

定义类时用 : 号 继承父类

子类继承了父类的属性和方法,但是子类无法继承父类的私有字段。

子类没有继承父类的构造函数,但是子类会默认调用父类的无参构造函数,创建父类对象,让子类可以使用父类中的成员

如果父类中有构造函数,需要写一个无参的构造函数,在子类中显示的调用父类的构造函数,使用关键字:base()

二、new 关键字

隐藏从父类集成的同名成员,隐藏后子类调用不到父类的成员。

当子类的成员和父类的成员名字相同的时候,可以使用new隐藏该成员,子类将调用不到父类中的该成员。

public new void ff(){
}

三、里氏转换

子类可以赋值给父类,如果父类中装的是子类对象,那么可以将这个父类强制转换为子类对象。

class chinese:persion persion有的公共属性方法子类有 子类还有自己的age 
{
public string age{get;set;}
}
chinese s = new chinese(); //初始化子类
persion p = s; //我要人 給我中国人 成立 
chinese c = p; //我要中国人 給我个人 不敢保证 报错
if(p is chinese){
chinese china = (chinese)p; //强制转换为中国人
}
object o = 3; //成立 object基类

四、类型转换

is:如果能转换成功,返回true。if(p is chinese)

as:如果能够转换,则返回对应的对象,否则返回null。chinese chin = p as Chinese;

集合

一、ArrayList集合

与数组区别:数组长度不可变,类型单一。集合长度可以改变,类型不固定。

 1 •protected void Page_Load(object sender, EventArgs e)
 2 {
 3     ArrayList arry = new ArrayList();
 4
 5     //添加单个
 6     arry.Add(1); //int
 7
 8     arry.Add(3.14); //double
 9
10     arry.Add("字符串"); //string
11
12     arry.Add(‘男‘); //char
13
14     arry.Add(500m); //decimal
15
16     arry.Add(new int[] { 1, 2, 3, 4, 5 });
17
18     arry.Add(new person());
19
20     Random r = new Random(); //随机数
21
22     r.Next(1, 9); // 1~8的随机数
23
24     arry.Add(r); //添加集合 无需遍历
25
26     arry.AddRange(new string[] { "one", "two", "three" }); //无需下面那样遍历也输出值
27
28     //arry.AddRange(arry);
29
30     arry.Remove(500m); //删除指定
31
32     arry.RemoveAt(0); //下标删除
33
34     arry.RemoveRange(0, 1); //根据下标移除一定范围的元素
35
36     //arry.Sort(); //升序排序 多元素报错
37
38     arry.Reverse(); //反转 倒序
39
40     arry.Insert(1, "插入的"); //指定位置插入元素
41
42     arry.InsertRange(1, new string[] { "asd", "asd" }); //指定位置插入集合
43
44     bool b = arry.Contains("插入的"); //判断是否包含指定元素
45     //清空
46     //arry.Clear();
47
48     //单个方法添加集合 遍历
49     for (int i = 0; i < arry.Count; i++) // arry.Count; arry.Capacity; //可包含个数 实际个数 每次集合中实际包含的元素count超过了可包含的元素个数capcity的时候,集合就会向内存多申请一倍的空间,来保证集合的长度一直够用。
50     {
51         if (arry[i] is person) //不判断输出命名空间 单个添加
52         {
53             Response.Write(((person)arry[i]).say());
54         }
55         else if (arry[i] is int[])
56         {
57             for (int j = 0; j < ((int[])arry[i]).Length; j++)
58             {
59                 Response.Write(((int[])arry[i])[j]);
60             }
61         }
62         else
63         {
64             Response.Write(arry[i]);
65         }
66     }
67 }
68
69 class person
70 {
71     public string say()
72     {
73         return "Hello";
74     }
75 }

二、List<T>泛型集合

实现定义好类型,长度不限,省去判断类型的操作

 1 List<int> list = new List<int>(); //创建泛型集合ArryList
 2
 3 list.Add(1); //添加单个
 4
 5 list.Add(2);
 6
 7 list.Add(3);
 8
 9 list.Add(4);
10
11 list.Add(5);
12
13 list.Add(6);
14
15 list.AddRange(new int[] { 1, 2, 3, 4 }); //添加集合
16
17 //list.Clear(); //清空
18
19 if (list.Contains(2))
20 { //是否存在
21
22     list.Remove(2); //删除指定
23
24     list.RemoveAt(1); //删除下标
25
26     list.RemoveRange(0, 1); //删除范围
27 }
28
29 var nums = list.ToArray(); //泛型集合转换为数组
30
31 for (int i = 0; i < list.Count; i++)
32 {
33     Response.Write(list[i]);
34 }
35
36 for (int i = 0; i < nums.Length; i++)
37 {
38     Response.Write(nums[i]);
39 }
40
41 char[] chas = new char[] { ‘a‘, ‘b‘ };
42
43 List<char> listc = chas.ToList(); //将数组转换为泛型集合
44
45 for (int i = 0; i < listc.Count; i++)
46 {
47     Response.Write(listc[i]);
48 }

三、var推断类型

c#中的var和javascript中的var是不同的。

c#是强类型语言,必须对每一个变量的类型明确定义。如:int a= 1; char a = ‘x‘;

js是若类型语言,var是用来声明变量的。

在c#中var关键字是用来根据“值”自动推断变量的类型,声明时,必须赋初始值。 var a = 1; var b = ‘x‘;

四、Hashtable键值对集合

通过键来查找对应值的,在键值对集合中,键必须是唯一的,值可以重复。

 1 Hashtable hs = new Hashtable(); //创建
 2
 3 hs.Add(1, "字符串"); //添加第一种
 4
 5 hs.Add(2, ‘男‘);
 6
 7 hs.Add(true, "正确的");
 8
 9 hs.Add(false, "错误的");
10
11 if (!hs.Contains(1)) //Contains == ContainsKey 是否包含key
12 {
13     hs.Add(1, "aaaa");
14 }
15
16 if (hs.ContainsValue(1)) //是否包含值
17 {
18     hs.Add(7, "111");
19 }
20
21 hs[5] = "asd"; //没有新增 有替换 添加第二种
22
23 hs[1] = "赋值"; //赋值 通过hs[key]
24
25 //hs.Clear(); //清空
26
27 hs.Remove(2); //删除key=2
28
29 foreach (var ht in hs.Keys) //foreach遍历 从什么中取
30 {
31     Response.Write(hs[ht]);
32 }

五、Dictionary字典键值对集合

键值对集合,需要规范类型

 1 Dictionary<int, string> dic = new Dictionary<int, string>(); //字典集合 规定键值对类型
 2
 3 dic.Add(1, "one"); //键必须唯一
 4
 5 dic.Add(2, "two");
 6
 7 dic[1] = "new"; //存在覆盖 不存在新增
 8
 9 foreach (var item in dic.Keys)
10 {
11     Response.Write("key:" + item + "---value:" + dic[item]);
12 }
13
14 foreach (KeyValuePair<int, string> kv in dic)
15 {
16     Response.Write("key:" + kv.Key + "---value:" + kv.Value);
17 }

文件操作

一、Path类

用来获得文件路径的

 1 string str = @"D:\video\xxx.avi";
 2
 3 var fileNameExt = Path.GetFileName(str); //获得文件名包含扩展名
 4
 5 var fileName = Path.GetFileNameWithoutExtension(str); //获得文件名不包含扩展名
 6
 7 var fileExt = Path.GetExtension(str); //获得文件扩展名
 8
 9 var DirectoryName = Path.GetDirectoryName(str); //获得路径包含文件夹名
10
11 var FullPath = Path.GetFullPath(str); //获得文件全路径
12
13 var combine = Path.Combine(@"c:\", "b.txt"); //连接两个字符串作为路径
14
15 Response.Write(fileNameExt + "<br />" + fileName + "<br />" + fileExt + "<br />" + DirectoryName + "<br />" + FullPath + "<br />" + combine);

二、文件路径

1、绝对路径:在电脑的某磁盘存放的物理路径。如:d:\game\sg7\sg7.exe

2、相对路径:文件相对于程序的所在路径。如:images/abc.jpg

三、编码

因为计算机存储数据存储的是二进制,编码就是将字符串以某种形式保存为二进制。

乱码产生的原因,保存此文件时采用的编码与打开时使用的编码不符。

美国人编码ASC 128 a~z 0~9

欧洲人编码ASCII 256

中国人编码GB2312 简体字

香港、台湾人编码Big5 繁体字

后来出的通用编码unicode 解析慢

web通用编码 utf-8

四、Encoding

Encoding.Default //默认编码

Encoding cn = Encoding.GetEncoding("gb2312"); //获得中文编码

五、File类

用来操作文件的类

 1 File.Delete(@"d:\11.txt"); //删除一个文件 不经过回收站
 2     if (!File.Exists(@"d:\11txt")) //判断一个文件是否存在
 3     {
 4         File.Create(@"d:\11.txt"); //创建一个文件
 5     }
 6 File.Copy(@"d:\11.txt", @"d:\11_copy.txt"); //复制一个文件
 7 File.Move(@"d:\11.txt", @"d:\11_copy.txt"); //移动一个文件
 8
 9 string write1 = "今天天气不错,空气挺好的。";
10 File.WriteAllBytes(@"d:11.txt", Encoding.Default.GetBytes(write1)); //转换为字节数组后写入
11
12 string[] write2 = new string[] { "明天天气不好", "后天天气也不好", "大后天也不好" };
13 File.WriteAllLines(@"d:\11.txt", write2, Encoding.Default);//行写入
14
15 string write3 = "麻烦,一次都写入就好了。";
16 File.WriteAllText(@"d:\11.txt", write3, Encoding.Default); //全部覆盖写入
17
18 //以字节数组形式读取
19 byte[] buff = File.ReadAllBytes(@"d:\11.txt");//解码 打开时 与保存时 编码需要一致
20 Response.Write(Encoding.GetEncoding("GB2312").GetString(buff));
21
22 //读取指定编码的文件的文本行
23 var strings = File.ReadLines(@"d:\11.txt", Encoding.Default);
24 foreach (var s in strings)
25 {
26     Response.Write(s + "<br />");
27 }
28
29 //读取指定编码所有行
30 var str = File.ReadAllText(@"d:\11.txt", Encoding.Default);
31 Response.Write(str);

ReadAllBytes字节读取:读取其他文件(多媒体,音乐,图片等),时使用字节形式读取。

ReadLines行读取:读取文本文件,具体操作某一行时,使用行读取。

ReadAllText全读取:读取文本文件,不需要单行操作时,全部读取。

六、文件流

File:读取只适用于小文件,一次性读取,很耗内存。

FileStream:操作大文件,读取文件时一点一点的读取。

FileStream操作字节的、StreamReader操作文本的。

 1 //FileStream字节读取数据
 2 FileStream file1 = new FileStream(@"d:11.txt",FileMode.OpenOrCreate, FileAccess.ReadWrite);
 3
 4 byte[] by = new byte[1024 * 1024 * 5]; //限定读取多少 5m
 5
 6 int result = file1.Read(by, 0, by.Length); //读出来的放到by字节数组中,从0开始,读到字节数组的长度结束。 返回实际读取到的有效字节数。
 7
 8 string s = Encoding.Default.GetString(by, 0, result); //从多少开始解码,解码多少个
 9
10 //关闭流 释放所占的资源 GC不能自动回收 需要手动回收
11
12 file1.Close(); //使用using自动关闭
13
14 file1.Dispose(); //使用using自动释放
15
16 Response.Write("该文件有:" + result / 1024 + "kb" + s);
17
18
19
20 //FileStream字节写入数据 使用using 自动关闭/释放资源
21 using (FileStream file2 = new FileStream(@"d:11.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite))
22 {
23     string str = "覆盖字符串";
24     byte[] byt = Encoding.Default.GetBytes(str); //转换为字节数组
25     file2.Write(byt, 0, byt.Length); //要写入的字符数组,从哪开始,到哪结束。
26 }
27
28
29 ////////////////////////////////////////////多媒体大文件copy
30
31 var source = @"D:\xxx.avi";
32
33 var target = @"D:\new.avi";
34
35 using (var fsread = new FileStream(source, FileMode.Open, FileAccess.Read)) //读
36 {
37     using (var fswrite = new FileStream(target, FileMode.OpenOrCreate, FileAccess.Write)) //写
38     {
39         while (true)
40         {
41             byte[] byread = new byte[1024 * 1024 * 5];
42
43             int r = fsread.Read(byread, 0, byread.Length);
44
45             if (r == 0) //0则为全部读取完毕
46             {
47                 break;
48             }
49             fswrite.Write(byread, 0, r); //写入
50         }
51     }
52 }
53
54 StreamRead、StreamWrite文本读取、写入
55
56 using (StreamReader sr = new StreamReader(@"d:\11.txt", Encoding.Default))
57 {
58     while (!sr.EndOfStream) //是否读到末尾
59     {
60         Response.Write(sr.ReadLine() + "<br />");
61     }
62 }
63
64 using (StreamWriter sw = new StreamWriter(@"d:\121.txt", true))//写入文件 true追加 false覆盖
65 {
66     sw.Write("asdflkjasdlkfjalskdfjlakszxncv.mzxcv");
67 }

 1 //FileStream字节读取数据
 2 FileStream file1 = new FileStream(@"d:11.txt",FileMode.OpenOrCreate, FileAccess.ReadWrite);
 3
 4 byte[] by = new byte[1024 * 1024 * 5]; //限定读取多少 5m
 5
 6 int result = file1.Read(by, 0, by.Length); //读出来的放到by字节数组中,从0开始,读到字节数组的长度结束。 返回实际读取到的有效字节数。
 7
 8 string s = Encoding.Default.GetString(by, 0, result); //从多少开始解码,解码多少个
 9
10 //关闭流 释放所占的资源 GC不能自动回收 需要手动回收
11
12 file1.Close(); //使用using自动关闭
13
14 file1.Dispose(); //使用using自动释放
15
16 Response.Write("该文件有:" + result / 1024 + "kb" + s);
17
18
19
20 //FileStream字节写入数据 使用using 自动关闭/释放资源
21 using (FileStream file2 = new FileStream(@"d:11.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite))
22 {
23     string str = "覆盖字符串";
24     byte[] byt = Encoding.Default.GetBytes(str); //转换为字节数组
25     file2.Write(byt, 0, byt.Length); //要写入的字符数组,从哪开始,到哪结束。
26 }
27
28
29 ////////////////////////////////////////////多媒体大文件copy
30
31 var source = @"D:\xxx.avi";
32
33 var target = @"D:\new.avi";
34
35 using (var fsread = new FileStream(source, FileMode.Open, FileAccess.Read)) //读
36 {
37     using (var fswrite = new FileStream(target, FileMode.OpenOrCreate, FileAccess.Write)) //写
38     {
39         while (true)
40         {
41             byte[] byread = new byte[1024 * 1024 * 5];
42
43             int r = fsread.Read(byread, 0, byread.Length);
44
45             if (r == 0) //0则为全部读取完毕
46             {
47                 break;
48             }
49             fswrite.Write(byread, 0, r); //写入
50         }
51     }
52 }
53
54 StreamRead、StreamWrite文本读取、写入
55
56 using (StreamReader sr = new StreamReader(@"d:\11.txt", Encoding.Default))
57 {
58     while (!sr.EndOfStream) //是否读到末尾
59     {
60         Response.Write(sr.ReadLine() + "<br />");
61     }
62 }
63
64 using (StreamWriter sw = new StreamWriter(@"d:\121.txt", true))//写入文件 true追加 false覆盖
65 {
66     sw.Write("asdflkjasdlkfjalskdfjlakszxncv.mzxcv");
67 }
时间: 2024-09-30 20:55:13

2、C#面向对象:封装、继承、多态、String、集合、文件(上)的相关文章

php面向对象 封装继承多态 接口、重载、抽象类、最终类总结

1.面向对象 封装继承多态  接口.重载.抽象类.最终类 面向对象 封装继承多态  首先,在解释面向对象之前先解释下什么是面向对象? [面向对象]1.什么是类? 具有相同属性(特征)和方法(行为)的一系列个体的集合,类是一个抽象的概念2.什么是对象?从类中拿到的具有具体属性值得个体,称为对象,对象是一个具体的个体 所以,面向对象即我们专注对象来处理问题,通过从一个个具有属性和功能的类中拿到对象来处理问题. 下面我们再来细说下面向对象的三大特征:继承/封装/多态 一.继承 在PHP中我们主要通关E

(1) 深入理解Java面向对象三大特性 封装 继承 多态

转眼已经工作快6年了,最开始做了2年J2EE:然后整了2年的数据仓库,主要是Cognos的报表开发:现在从事4G LTE核心网的开发,用的语言任然是Java,但写代码的机会不多,基本都是看代码找BUG,偶尔做点new feature也是在比较成熟的框架上复制.粘贴.修改,大部分时间还是在理解业务,钱多.事少.离家近,当时来这家公司图的是后面2点,2年过去了,英文水平有所提升,对敏捷开放也有一定的了解,但技术方面明显退步了或者说没有进步吧,本来以前也不怎么好,因为工作上用不到,自己也没怎么学习,所

初识JAVA(【面向对象】:pub/fri/pro/pri、封装/继承/多态、接口/抽象类、静态方法和抽象方法;泛型、垃圾回收机制、反射和RTTI)

JAVA特点: 语法简单,学习容易 功能强大,适合各种应用开发:J2SE/J2ME/J2EE 面向对象,易扩展,易维护 容错机制好,在内存不够时仍能不崩溃.不死机 强大的网络应用功能 跨平台:JVM,字节码 两个命令: javac helloworld.java:将Java文件编译为字节码的.class文件 java helloworld:运行Java程序...??暂时这么认为 数据类型: 普通数据类型:int a=3; 对象数据类型:使用关键字new,String s=new String("

面向对象的三大特性---封装继承多态

面向对象的三大特性---封装继承多态 首先我们来创建一个控制台程序 新建一个父类Person 创建一个子类继承父类Person 子类: main函数: 输出结果: 根据结果显示创建子对象,首先调用父类的构造函数在调用子类的构造函数. 继承的传递性 例如: A:B,B:C,则A:C ⅰ.继承过来之后被隐藏,有意隐藏加一个关键字"new",如果加了关键字"new",就告诉子类,父类里面的sayHi只能被隐藏,不能被覆写  ⅱ.继承过来之后被覆写/重写,覆写需要在父类里面

类与对象 面向对象和面向过程对比 面向对象三大特征:封装 继承 多态

 初识面向对象 面向过程: 一切以事务的发展流程为中心. 面向对象: 一切以对象为中心. 一切皆为对象. 具体的某一个事务就是对象 打比方: 大象进冰箱 步骤: 第一步, 开门, 第二步, 装大象, 第三步, 关门 面向对象:大象, 你进冰箱. 此时主语是大象. 我操纵的是大象. 此时的大象就是对象 1. 面向过程: 一切以事物的流程为核心. 核心是"过程"二字, 过程是指解决问题的步骤, 即, 先?干什么, 后干什么. 基于该思想编写程序就好比在编写一套流水线. 是一种机械 式的编程

Python 入门 之 面向对象的三大特性(封装 / 继承 / 多态)

Python 入门 之 面向对象的三大特性(封装 / 继承 / 多态) 1.面向对象的三大特性: (1)继承 ? 继承是一种创建新类的方式,在Python中,新建的类可以继承一个或多个父类,父类又可以称为基类或超类,新建的类称为派生类或子类. ? 在Python中实现继承非常简单,在声明类的时候,在类名后面添加一个小括号,就可以完成继承关系.单纯的从代码的层面上来看当两个类具有相同的功能或者特征的时候就可以使用继承.提取一个父类,这个父类中编写者两个类相同的部分,然后两个类分别去继承这个类就可以

面向对象三大特性(封装/继承/多态)

引入:在面向对象思想中,有三大特性,封装  继承  多态. 思考:我们在使用类和对象实现编程的时候,到底是遵循这什么样的逻辑呢?为什么要这样规范类呢? 引入:面向对象很重要的思想就是隐藏,即外部不知道类内部是如何实现业务逻辑的,只管调用和使用结果,这个就是面向对象三大特性之一:  封装 1.封装[掌握] 定义:封装,字面意思就是将内容装到某个容器中,并进行密封保存,在面向对象思想中,封装指数据和对数据的操作捆绑到一起,形成 对外界的隐藏,同时对外提供可以操作的接口. 1.数据:即要操作的数据,在

封装继承多态到底讲的是什么

封装继承多态到底讲的是什么 封装.继承.多态并不是针对C#语言提出来的,他是一个在面向对象思想下产生的一个概念.所以想要弄明白封装.继承.多态,首先就要先了解面向对象概念. 封装:当我们提及面向对象的时候,这个对象怎么来?就是通过我们人为的封装得来.封装就是把一些特征或功能组合到一个抽象的对象上.就比如说电脑:它的特征是有一个显示屏,有一个主机,有鼠标和键盘等等.功能有计算等.那我们把这些特征和功能组合到“电脑”这个抽象的名词上时,“电脑”于是就有了这些特征和功能.但这个“电脑”不是实物,它代表

三大特性:封装,继承,多态

透切理解面向对象三大基本特性是理解面向对象五大基本原则的基础. 三大特性是:封装,继承,多态 所谓封装: 也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏.封装是面向对象的特征之一,是对象和类概念的主要特性. 简单的说,一个类就是一个封装了数据以及操作这些数据的代码的逻辑实体.在一个对象内部,某些代码或某些数据可以是私有的,不能被外界访问.通过这种方式,对象对内部数据提供了不同级别的保护,以防止程序中无关的部分意外的改变或错误的使用了对

使用java中,面向对象封装+继承的方法算题

1.第一种:给定一行字符,逆序输出此字符串(空格.数字不输出),如"ab 23,(4 cd"输出"dc(,ba".(要求:使用面向对象封装+继承) class Bu { private String str; public Bu(){} public Bu(String str){ this.str = str; } public String getStr(){ return str; } public void setStr(String str){ this.